DEV Community

Poveda
Poveda

Posted on

Podman + Windows: Resolvendo erro "No connection could be made because the target machine actively refused it"

Enquanto estava estudando para escrever o post WSL: Gerenciando o disco da distro precisei reiniciar as distros do WSL algumas vezes. Entre essas distros estava a VM utilizada pelo Podman Desktop.

Qual foi a minha surpresa quando no dia seguinte precisei utilizar o podman e recebi a seguinte mensagem

Cannot connect to Podman. Please verify your connection to the Linux system using podman system connection list, or try podman machine init and podman machine start to manage a new Linux VM
Error: unable to connect to Podman socket: failed to connect: dial tcp 127.0.0.1:63708: connectex: No connection could be made because the target machine actively refused it.

Num primeiro momento tentei parar e subir a VM novamente com os comandos podman machine stop e podman machine start porém sem sucesso. Depois disso resolvi ler a mensagem de erro em busca mais pistas. A mensagem dizia para rodar o comando podman system connection list e validar se o podman esta escutando na porta mencionada.

Rodando o comando a saída confirmou que porta 63708 estava sendo utilizada pela VM:

$ podman system connection list
Name                         URI                                                Identity                                                        Default     ReadWrite
podman-machine-default       ssh://root@127.0.0.1:64624/run/podman/podman.sock  ~\.local\share\containers\podman\machine\machine  false       true
podman-machine-default-root  ssh://root@127.0.0.1:63708/run/podman/podman.sock  ~\.local\share\containers\podman\machine\machine  true        true
Enter fullscreen mode Exit fullscreen mode

Obs: Os caminhos do identity foram encurtados para facilitar a leitura

Ainda sem ideia sobre o que fazer resolvi olhar o que mais a mensagem dizia. A outra opção sugerida pela mensagem era subir uma nova VM do podman para solucionar o problema, entretanto essa era uma opção que não desejava executar num primeiro momento pois tenho alguns pods parados e imagens salvas no cache que demorariam muito para baixar novamente (ex: sql server).

Com o cenário desenhado, iniciei as pesquisas para tentar solucionar o problema. Encontrei a "issue No connection could be made because the target machine actively refused it" e tentei a maioria das soluções propostas na issue porém sem sucesso. Inclusive vi que implementaram uma correção para o podman e que também não resolveu meu problema 😢.

Voltei novamente para as informações fornecidas pelo podman e tive um estalo:

"O podman desktop se comunica com a VM via SSH. Será que a porta 63708 está habilitada no serviço"

Com essa suspeita acessei a distro do podman e abri o arquivo /etc/ssh/sshd_config no editor de texto. Indo para o final do arquivo constatei que somente a porta 64624 estava habilitada para acesso ssh. Então resolvi adicionar a porta 63708. O arquivo que ficou da seguinte forma após editado

...
# override default of no subsystems
Subsystem       sftp    /usr/libexec/openssh/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       PermitTTY no
#       ForceCommand cvs server
Port 64624
Port 63708
Enter fullscreen mode Exit fullscreen mode

Depois de salvar a alteração o próximo passo foi reiniciar o serviço do ssh com o comando:

sudo systemctl restart sshd
Enter fullscreen mode Exit fullscreen mode

Aguardei uns segundos e rodei o comando systemctl status sshd a fim de validar se o serviço havia iniciado. O resultado do comando comprova que o serviço estava rodando sem problemas:

● sshd.service - OpenSSH server daemon
     Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf
     Active: active (running) since Wed 2024-07-03 21:02:01 -03; 3s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 7207 (sshd)
      Tasks: 1 (limit: 4697)
     Memory: 1.3M
        CPU: 12ms
     CGroup: /system.slice/sshd.service
             └─7207 "sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups"

Jul 03 21:02:01 PovedaRyzen systemd[1]: Starting sshd.service - OpenSSH server daemon...
Jul 03 21:02:01 PovedaRyzen (sshd)[7207]: sshd.service: Referenced but unset environment variable evaluates to an empty string: OPTIONS
Jul 03 21:02:01 PovedaRyzen sshd[7207]: Server listening on 0.0.0.0 port 63708.
Jul 03 21:02:01 PovedaRyzen sshd[7207]: Server listening on :: port 63708.
Jul 03 21:02:01 PovedaRyzen sshd[7207]: Server listening on 0.0.0.0 port 64624.
Jul 03 21:02:01 PovedaRyzen sshd[7207]: Server listening on :: port 64624.
Jul 03 21:02:01 PovedaRyzen systemd[1]: Started sshd.service - OpenSSH server daemon.
Enter fullscreen mode Exit fullscreen mode

Com o ssh liberado para a porta 63708, rodei alguns comandos a fim de validar a conexão. Para a minha felicidade os resultados foram esses:

$ podman ps -a
CONTAINER ID  IMAGE                                                  COMMAND               CREATED      STATUS                    PORTS       NAMES
5a6ba726847e  localhost/podman-pause:5.1.0-dev-4817811cb-1713312000                        3 weeks ago  Exited (0) 292 years ago              234f8433dbf7-infra
9fecc6f0544a  docker.io/library/nginx:latest                         nginx -g daemon o...  3 weeks ago  Exited (0) 292 years ago              nginx-nginx
Enter fullscreen mode Exit fullscreen mode
$ podman images
REPOSITORY                           TAG                             IMAGE ID      CREATED       SIZE
localhost/podman-pause               5.1.0-dev-4817811cb-1713312000  d3af6c318a9d  3 weeks ago   1.14 MB
docker.io/library/nginx              latest                          4f67c83422ec  5 weeks ago   192 MB
docker.io/julianopoveda/readonlyapi  v1                              ac7c4054326e  2 months ago  120 MB
docker.io/kindest/node               <none>                          09c50567d34e  4 months ago  962 MB
Enter fullscreen mode Exit fullscreen mode

Conclusão

Por algum motivo que não consegui descobrir o real motivo da porta ter se tornado incomunicável. Essa questão dificultou bastante a busca de uma solução, pois é bem provável que alguém já passou por esse problema e reportou em algum lugar como solucionar.

No fim tive que contar com a minha experiência e memória para resolver o problema, sem o auxilio de uma fonte externa. E esse é um dos motivos pelos quais tenho escrito esses posts, ter uma base de solução de problemas documentada tanto online quanto offline.

Uma última curiosidade: enquanto buscava algumas informações para enriquecer esse post descobri que poderia ter trocado a porta default de comunicação para a porta utilizada pelo rootless usando o comando podman system connection default podman-machine-default. Esse comando teria resolvido o problema de forma bem mais simples, visto que a porta 64624 estava aberta no sshd.

Referências

Top comments (0)