Qual é o número IP do meu contêiner usando o Docker beta para mac?


28

Anteriormente, eu estava usando o kit de ferramentas do Docker e poderia usar docker-machine inspect <machine-name>para encontrar o IP da máquina docker, a fim de visualizar as páginas servidas pelo contêiner.

Fiz upgrade para o cliente docker beta (para mac) e não consigo encontrar onde as páginas estão sendo veiculadas.

Presumo que, como o docker é puro e não o docker-machine, eu veria as portas expostas no localhost. Mas eles não estão abertos. Mesmo via kitematic, eu navego até a porta exposta (80), mas não vejo nada.

$ docker inspect tiny_cori | jq '.[].HostConfig.PortBindings'
{
  "80/tcp": [
    {
      "HostIp": "",
      "HostPort": "80"
    }
  ]
}

$ docker inspect tiny_cori | jq '.[].NetworkSettings.IPAddress'
"172.17.0.2"

$ curl 172.17.0.2:80/status
^C

$ docker exec -t -i tiny_cori /bin/bash

root@f1c303f60a15:/# curl localhost:80/status
{"status":"OK"}

root@f1c303f60a15:/# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1
    link/sit 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1
    link/tunnel6 :: brd ::
4: ip6gre0@NONE: <NOARP> mtu 1448 qdisc noop state DOWN group default qlen 1
    link/gre6 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
26: eth0@if27: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:2/64 scope link
       valid_lft forever preferred_lft forever

172.17.0.2 é realmente o IP do meu contêiner? Caso contrário, onde posso encontrar qual é o IP? Ou tenho um problema de mapeamento de portas?

Respostas:


25

Você está olhando o endereço IP dentro do contêiner 172.17.0.2 e existe apenas "dentro" dos contêineres da janela de encaixe (e entre eles).

O endereço IP ao qual você deseja se conectar é o endereço IP das máquinas host. Faça um ifconfig no seu Mac e encontre o correto (normalmente 192.168.xy ou 10.xyz). O host local também deve funcionar de fora do contêiner.


5
Não tenho certeza de quem rebaixou isso, mas na verdade é a resposta correta. Com o Docker para Mac, não há mais uma VM intermediária com um endereço IP da máquina separado. Bater no host (via IP ou host local) deve encaminhar as solicitações para o contêiner, desde que as portas sejam mapeadas corretamente.
DNJohnson

Obrigado. Fiquei confuso por que isso foi rebaixado (duas vezes). Talvez porque pareça simples demais para ser a resposta real.
Mikael Kjær

Eu não neguei isso. Mas suspeito que haja um subconjunto de usuários que, por qualquer motivo, essa resposta direta não funcione (ou não). Estou marcando como correto.
Synesso 2/08/16

2
Bem, aqui está uma coisa interessante - no OS X quando vou para a minha VM xHyve via comando screen e executo curl localhost: 8080 - recebo resposta de um dos contêineres. Mas se eu fizer o mesmo no terminal OS X - conexão recusada. Como isso pode acontecer?
Mvmn

1
PS Isso aconteceu com um contêiner criado via docker-compose.
Mvmn

8

digite o seguinte comando e você obterá o seu docker container ip

$docker inspect <docker-container-name>

Role para baixo e você obterá o endereço IP em " Configurações de rede "


Obrigado. Eu esqueci de mencionar que tentei isso e não funcionou. Minha pergunta foi atualizada.
Synesso

Certo, mas você não pode fazer ping. Eu suspeito que é por isso que a resposta correta acima é votada abaixo. A questão que me resta é se existe uma maneira de fazer a ponte para a rede no host virtual. O host virtual ainda está lá se for melhor integrado ao MacOS, e tenho certeza de que você pode executar ping desses endereços IP a partir daí, mas não consigo fazer a ponte para essa rede para que eles estejam disponíveis localmente no Mac?
Gerry Gleason

6

O Docker para Mac é executado no endereço IP 127.0.0.1


isso não é inteiramente uma afirmação falsa: P
jonas

De fato, essa foi a resposta mais direta que resolveu meu problema.
James

1

O endereço IP é mencionado explicitamente na saída para docker ps.

$ docker ps
CONTAINER ID        ... PORTS
c785a183b376        ... 0.0.0.0:80->80/tcp, 443/tcp

$ curl 0.0.0.0:80/status
{"STATUS":"OK"}

Além disso, localhostnão é o mesmo que0.0.0.0


5
0.0.0.0 significa todos os endereços IP na máquina atual e geralmente é usado quando você está ouvindo, não se conectando. Eu não entendo como a curvatura acima funcionaria.
Mikael Kjær

2
O 0.0.0.0 é o endereço IP ao qual o serviço está vinculado no contêiner e não significa nada no contexto do host que o executa. a saída na coluna PORTS está dizendo que a porta 80 do contêiner (0.0.0.0:80) está mapeada para a porta 80 localmente (80 / tcp), bem como para a porta 443 localmente.
Kevin Kevin

1
Não, não é o mesmo, mas, como apontado, 0.0.0.0 não é um endereço IP, é um sinal para ouvir que eu quero todos eles, incluindo o host local. No contexto da conexão, eles são os mesmos, a menos que o serviço esteja vinculado a um IP específico (localhost ou IP externo).
Gerry Gleason

0

Eu acredito que 127.0.0.1 é para localhost.

Para obter o ID do docker em execução no seu Mac. Execute "ifconfig" no terminal e o terá no resultado além do 127.0.0.1

Principalmente algo como 192.168.xy

Espero que ajude.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.