As conexões provavelmente são DNATed para os contêineres. Isso significa que o host agora está atuando como um roteador entre "fora" e os contêineres. netstat
não exibirá essas conexões. Você precisará de ferramentas adicionais para os fluxos ausentes.
Uma dessas ferramentas é a conntrack
que consulta conntrack sobre conexões rastreadas. Usando este comando com a opção -j
:
conntrack -L -j
exibirá apenas conexões NAT, mostrando os fluxos ativos estabelecidos atualmente entre os contêineres e os externos e complementando a saída de netstat
.
Se você deseja uma saída semelhante à que netstat
você pode tentar, se disponível, netstat-nat
mais ou menos depende do mesmo mecanismo.
Um outro método, para executar em um loop, seria consultar o Docker (usando docker
diretamente no host) sobre o pid principal de cada contêiner e usar o resultado para acessar a rede do contêiner, para executar um procedimento habitual netstat
. Isso tem a vantagem de exibir determinados estados que não são mais exibidos com o conntrack (como CLOSE_WAIT
geralmente um sintoma de problemas em um aplicativo).
Dado um contêiner Docker em execução chamado containername
, ele deve obter todas as suas conexões de rede, como visto do seu próprio ponto de vista, mesmo que o contêiner em si não possua nenhum comando útil para isso:
nsenter --target $(docker inspect --format '{{.State.Pid}}' containername) --net netstat -utn