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

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


Discover more from Coursity

Subscribe to get the latest posts sent to your email.

Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

    Leave a Reply

    Your email address will not be published. Required fields are marked *