Como obter o endereço IP do docker container em execução

Respostas:

115

Se você não quiser mapear as portas de seu host para o contêiner, poderá acessar diretamente o IP de intervalo do docker para o contêiner. Por padrão, esse intervalo só é acessado de seu host. Você pode verificar os dados de sua rede de contêiner fazendo:

docker inspect <containerNameOrId>

Provavelmente é melhor filtrar:

docker inspect <containerNameOrId> | grep '"IPAddress"' | head -n 1

Normalmente, o intervalo de ip do docker padrão é 172.17.0.0/16. Seu host deve ser 172.17.0.1e seu primeiro contêiner deve ser, 172.17.0.2se tudo estiver normal e você não especificar nenhuma opção especial de rede.

EDITAR Outra maneira mais elegante de usar os recursos do docker em vez de "truque de bash":

docker inspect -f "{{ .NetworkSettings.IPAddress }}" <containerNameOrId>
OscarAkaElvis
fonte
7
Você está falando sobre o IP interno, e não tem nada a ver com a questão em questão. Sua resposta confunde apenas o leitor. Já que o IP é o IP da máquina onde o Docker está sendo executado. Que é apenas localhost:)
David Gatti
Você está errado. O OP não especifica nada sobre o microsserviço deve ser acessível de fora. Ele apenas disse "microsserviço de nó de teste através do navegador" e isso pode ser feito com meu método proposto usando a http://172.17.0.2:anyPortpartir do host. Obviamente, se você deseja acessá-lo usando localhost no host, deve mapear as portas. Vai ver o que o OP quer.
OscarAkaElvis
3
Você está dizendo que pode acessar o IP interno dentro do Container do host? Isso é fisicamente impossível, é uma rede completamente diferente. Não apenas verifiquei e sim, não consigo acessar o 172.17.0.7 do meu contêiner do docker, mas devo ser capaz de ver todo o contendor do docker se digitalizar minha máquina host com um scanner de rede, e esse não é o caso novamente. Eu sei que não deveria funcionar, testei o que você fala (nunca se sabe) e não está funcionando. Então, talvez sua explicação esteja faltando uma parte importante?
David Gatti
Os contêineres são acessíveis a partir do host. Experimente você mesmo ... Vou te dar algumas dicas. 1. Baixe um contêiner de execução: docker run --name struts --rm -i tomcat2. Obtenha o ip do contêiner (se você tiver apenas um): docker inspect struts | grep '"IPAddress"' | head -n 13. Abra-o no navegador do host http://x.x.x.x:8080. Você pode ver a página padrão do Apache Tomcat.
OscarAkaElvis
1
Não consegui acessar o aplicativo da web no contêiner sem mapear a porta usando -p
bilal.haider
22

Use a --formatopção para obter apenas o endereço IP em vez de todas as informações do contêiner:

sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' <CONTAINER ID>
Nilesh Patel
fonte
4
No host do Windows, use aspas duplas em vez de aspas simples. Por exemplo, sudo docker inspect --format "{{.NetworkSettings.IPAddress}}" <CONTAINER ID or NAME> Referência: link
Vineet Sajwan
1
novo formato de informação sobre container aqui
Igor
18

Para motores docker modernos, use este comando:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

e para motores mais antigos, use:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id
Nima Ghoroubi
fonte
Conforme mencionado e vinculado no comentário de @sanyash na área do OP original.
Jesse Chisholm
Erro de análise de modelo: modelo:: 1: ação não
fechada
11

se quiser obtê-lo dentro do contêiner, você pode tentar

ip a | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep 172.17
Ilya Yevlampiev
fonte
5

Você pode iniciar seu contêiner com a bandeira -P. Isso "atribui" uma porta aleatória à porta exposta de sua imagem.

Com docker port <container id>você pode ver a porta escolhida aleatoriamente. O acesso é então possível via localhost:port.

gScht
fonte
-2

Você não pode acessar o IP do docker de fora da máquina host. Se o seu navegador estiver em outra máquina, é melhor mapear a porta do host para a porta do contêiner, passando-p 8080:8080 comando run.

Passando, -pvocê pode mapear a porta do host para a porta do contêiner e um proxy é configurado para encaminhar todo o tráfego da referida porta do host para a porta do contêiner designada.

Akash Sharma
fonte