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.