Existe um comando que eu possa executar para obter o endereço IP do contêiner diretamente do host após a criação de um novo contêiner?
Basicamente, quando o Docker cria o contêiner, desejo rolar meus próprios scripts de implantação de código e configuração de contêiner.
Respostas:
A
--format
opção deinspect
vem para o resgate.A sintaxe do cliente Docker moderno é:
A sintaxe do cliente Old Docker é:
Esses comandos retornarão o endereço IP do contêiner do Docker.
Conforme mencionado nos comentários: se você estiver no Windows, use aspas duplas, em
"
vez de aspas simples,'
entre as chaves.fonte
<no value>
resposta em um Mac usando Fig / Boot2Docker<no value>
se tentar executar isso em um contêiner que não está sendo executado. Verifique se o contêiner está em execução antes de fazer isso.{{ .NetworkSettings.Networks.$network.IPAddress }}
. O padrão parece ser bridge, mas em docker-compose, este será um nome específico que depende do nome do seu aplicativo (acho que do sinalizador --project-name, embora isso também dependa de que tipo de configuração de rede você configurou). Eu escrevi uma resposta completa em uma resposta aqui stackoverflow.com/questions/17157721/…Você pode usar
docker inspect <container id>
.Por exemplo:
fonte
docker inspect $CID | grep IPAddress | cut -d '"' -f 4
, ele funciona bem :)alias dockerip='docker ps | tail -n +2 | while read cid b; do echo -n "$cid\t"; docker inspect $cid | grep IPAddress | cut -d \" -f 4; done'
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
é a nova sintaxe.-format
é preterido, torna-se--format
.Primeiro, obtenha o ID do contêiner:
(A primeira coluna é para o ID do contêiner)
Use o ID do contêiner para executar:
Na parte inferior, em "Configurações de rede", você pode encontrar "Endereço IP"
Ou faça:
fonte
docker run -it MYCONTAINER /bin/bash
), a saída deinspect
não tem seçãoNetworkSettings
!docker network inspect bridge | grep Gateway | grep -o -E '[0-9.]+'
... | grep IP
solução a todos os detalhes de formatação necessários para obter o IP. 1docker run -it MYIMAGE
(que não é um nome de contêiner ); se vocêdocker inspect MYIMAGE
obtiver informações estáticas sobre a imagem . Você precisa encontrar o nome do contêiner em execução (ou usar seu ID, como outros sugerem). No meu sistema, o primeiro container criado a partir dessa imagem é padronizado como nomeMYIMAGE_1
, assimdocker inspect MYIMAGE_1
como NetworkSettings.Você pode adicionar
-i
ao grep por ignorar o caso, e até o seguinte funcionará:fonte
Para obter todos os nomes de contêineres e seus endereços IP em apenas um único comando.
Se você estiver usando
docker-compose
o comando será este:A saída será:
fonte
{{.NetworkSettings.IPAddress }}
para{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}
docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -aq | xargs) | sed -e '/^$/d'
. Ossed(1)
Remove as linhas vazias de recipientes presentes, mas não possuindo um endereço de IP.Adicione este script de shell no seu
~/.bashrc
arquivo ou relevante:Em seguida, para obter o endereço IP de um contêiner, basta fazer o seguinte:
Para a nova versão do Docker, use o seguinte:
fonte
Template parsing error: template: :1:19: executing "" at <.NetworkSettings.IPA...>: map has no entry for key "NetworkSettings"
source ~/.bash_profile
Mostrar todos os endereços IP do contêiner:
fonte
No Docker 1.3+, você também pode verificá-lo usando:
Digite o Docker em execução (Linux):
Para Windows:
fonte
docker exec [container-name-or-id] ip a
docker exec [container-id or container-name] ipconfig
No Docker versão 1.10.3, compilação 20f81dd
A menos que você tenha informado o contrário, o Docker sempre lança seus contêineres na rede de pontes. Então você pode tentar este comando abaixo:
O qual deve retornar uma seção Contêineres que exibirá o endereço IP desse contêiner em execução.
fonte
Executar:
Isso exibirá imagens ativas do docker:
Use o valor ID do CONTAINER:
"172.17.0.2"
fonte
Com base em algumas das respostas que adorei, decidi mesclá-las a uma função para obter todos os endereços IP e outra para um contêiner específico. Eles estão agora no meu
.bashrc
arquivo.O primeiro comando fornece o endereço IP de todos os contêineres e o segundo endereço IP de um contêiner específico.
fonte
Contêineres de referência por nome:
Em seguida, pegue o endereço do endereço IP pelo nome:
fonte
Eu escrevi o seguinte script Bash para obter uma tabela de endereços IP de todos os contêineres em execução
docker-compose
.Você deve alterar a rede variável para o seu próprio nome de rede.
fonte
Aqui está uma resposta rápida de trabalho:
Obtenha o nome ou o ID do seu contêiner:
Em seguida, obtenha o IP:
Obtenha a porta:
fonte
O Docker está escrito em Go e também usa a sintaxe Go para fins de consulta.
Para inspecionar o endereço IP de um contêiner específico, você precisa executar o comando (
-f
para "formato"):Para o ID ou nome do contêiner, você pode executar o comando
que listará todos os contêineres em execução.
fonte
Aqui está uma solução que desenvolvi hoje em Python, usando a
docker inspect container
saída JSON como fonte de dados.Eu tenho muitos contêineres e infraestruturas que preciso inspecionar e preciso obter informações básicas de rede de qualquer contêiner, de maneira rápida e bonita . Por isso eu fiz esse script.
IMPORTANTE: Desde a versão 1.9, o Docker permite criar várias redes e anexá-las aos contêineres.
A saída é:
fonte
O procedimento acima funciona se o contêiner for implantado na rede de pontes padrão.
No entanto, se estiver usando uma rede de ponte personalizada ou uma rede de sobreposição, achei o seguinte abaixo para funcionar melhor:
fonte
Para estender a resposta do ko-dos, aqui está um alias para listar todos os nomes de contêineres e seus endereços IP:
fonte
docker ps -q
para evitar otail
e--format
para evitar o grep. Além disso, você pode passar vários IDs de contêiner paradocker inspect
um loop no shell.docker ps -q
exibe apenas os IDs numéricos dos contêineres, mas acho que usar o nome deles é melhor.tail
é apenas para se livrar da primeira linha (cabeçalho da tabela) e ainda é necessário. Eu poderia usar--format
, no entanto:docker ps | tail -n +2 | while read -a a; do name=${a[$((${#a[@]}-1))]}; echo -ne "$name\t"; docker inspect --format="{{.NetworkSettings.IPAddress}}" $name | cut -d \" -f 4; done
. Mas isso não parece uma grande melhoria ... agrep
IMO era mais legível.docker inspect $cid | grep IPAddress | cut -d '"' -f 4 | tail -n 1
Eu uso dessa maneira simples
por exemplo
fonte
Se você instalou o Docker usando o Docker Toolbox, poderá usar o aplicativo Kitematic para obter o endereço IP do contêiner:
fonte
docker inspect
não funciona quando você executa a caixa de ferramentas da janela de encaixe. Ele informará um endereço IP, mas não é o endereço correto que seus serviços usarão.Para obter o endereço IP e a porta do host de um contêiner:
Resultado:
fonte
NOTA!!! para uso do Docker Compose:
Como o Docker Compose cria uma rede isolada para cada cluster, os métodos abaixo não funcionam
docker-compose
.A maneira mais elegante e fácil é definir uma função shell, atualmente a resposta mais votada @ WouterD's :
O Docker pode gravar IDs de contêiner em um arquivo como os programas Linux:
Em execução
--cidfile=filename
, o Docker despeja o ID do contêiner em "filename".Consulte " Docker executa a seção equivalente ao PID " para obter mais informações.
Usando um arquivo PID:
Executando contêiner com
--cidfile
parâmetro, oapp.cid
conteúdo do arquivo é como:Você pode usar o conteúdo do arquivo para inspecionar os contêineres do Docker:
Você pode extrair o IP do contêiner usando um script Python embutido:
Aqui está uma forma mais humana:
Consulte " 10 alternativas para obter os endereços IP do contêiner do Docker " para obter mais informações.
fonte
Para o Windows 10:
fonte
Isso listará todos os IPs de contêiner no host:
fonte
O Docker inspeciona o uso para imprimir todos os ips de contêiner e seus respectivos nomes
fonte
Apenas para completar:
Eu realmente gosto da
--format
opção, mas no começo eu não estava ciente disso, então usei um simples liner Python para obter o mesmo resultado:fonte
Combinando respostas anteriores com a localização do ID do contêiner com base no nome da imagem do Docker:
fonte
Usar:
fonte
$ docker inspect c4591485328d | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1
172.17.0.2
Para contêineres do Windows, use
onde
<container>
é o nome ou o ID do contêiner.Você pode usar
docker ps
para encontrar o ID do contêiner.fonte
Se você esqueceu a ID do contêiner ou não deseja manipular com os comandos do shell, é melhor usar a interface do usuário como o Portainer.
https://portainer.io/
Lá você pode encontrar todas as informações sobre o contêiner também IP.
fonte