DEV Community

Poveda
Poveda

Posted on

5

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

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more