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 trypodman machine init
andpodman 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
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
Depois de salvar a alteração o próximo passo foi reiniciar o serviço do ssh com o comando:
sudo systemctl restart sshd
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.
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
$ 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
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.