Qual è il numero IP del mio contenitore che utilizza Docker beta per mac?


28

In precedenza stavo usando il toolkit Docker e potevo usare docker-machine inspect <machine-name>per trovare l'IP della macchina docker, al fine di visualizzare le pagine servite dal contenitore all'interno.

Ho eseguito l'aggiornamento al client beta docker (per mac) e non riesco a trovare dove vengono pubblicate le pagine.

Presumo perché è docker puro e non docker-machine vedrei le porte esposte su localhost. Ma non sono aperti. Anche via kitematic mi dirigo verso la porta esposta (80) ma non vedo nulla.

$ 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 è davvero l'IP del mio contenitore? In caso contrario, dove posso trovare qual è l'IP? O ho un problema di mappatura delle porte?

Risposte:


25

Stai guardando l'indirizzo IP all'interno del contenitore che è 172.17.0.2 ed esiste solo "all'interno" dei contenitori della finestra mobile (e tra di essi).

L'indirizzo IP che si desidera connettere è l'indirizzo IP delle macchine host. Esegui un ifconfig sul tuo Mac e trova quello giusto (in genere 192.168.xy o 10.xyz). Anche Localhost dovrebbe funzionare dall'esterno del contenitore.


5
Non sono sicuro di chi abbia effettuato il downgrade di questo, ma in realtà è la risposta corretta. Con Docker per Mac, non esiste più una VM intermedia con un indirizzo IP macchina separato. Colpire l'host (tramite IP o localhost) dovrebbe inoltrare le richieste al contenitore purché le porte siano mappate correttamente.
DNJohnson,

Grazie. Ero confuso perché questo era stato sottoposto a downgrade (due volte). Forse perché sembra troppo semplice per essere la risposta effettiva.
Mikael Kjær,

Non ho valutato questo. Ma sospetto che ci sia un sottoinsieme di utenti che, per qualsiasi motivo, questa risposta semplice non funziona (o non ha funzionato). Sto contrassegnando come corretto.
Synesso

2
Bene, ecco una cosa interessante - su OS X quando vado sulla mia VM xHyve tramite il comando schermo ed eseguo curl localhost: 8080 - Ottengo la risposta da uno dei contenitori. Ma se faccio lo stesso nel terminale OS X - la connessione viene rifiutata. Come può succedere?
MVV,

1
PS Questo è successo a un container creato tramite docker-compose.
MVV,

8

digita il seguente comando e otterrai il tuo contenitore ip docker

$docker inspect <docker-container-name>

Scorri verso il basso e otterrai l'indirizzo IP in " Impostazioni di rete "


Grazie. Ho trascurato di dire che ho provato questo e non ha funzionato. La mia domanda è stata aggiornata
Synesso,

Giusto, ma non puoi eseguire il ping. Ho il sospetto che questo sia il motivo per cui la risposta corretta sopra viene annullata. La domanda che mi rimane è se esiste un modo per collegarsi alla rete sull'host virtuale. L'host virtuale è ancora lì se integrato meglio in MacOS, e sono sicuro che puoi eseguire il ping di questi indirizzi IP da lì, ma non posso collegarmi a quella rete in modo che siano disponibili localmente sul Mac?
Gerry Gleason,

6

Docker per Mac funziona con l'indirizzo IP 127.0.0.1


questa non è una dichiarazione completamente falsa: P
jonas,

In effetti, questa è stata la risposta più semplice che ha risolto il mio problema.
James,

1

L'indirizzo IP è esplicitamente indicato nell'output a 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"}

Inoltre, localhostnon è lo stesso di0.0.0.0


5
0.0.0.0 indica tutti gli indirizzi IP sulla macchina corrente e viene generalmente utilizzato durante l'ascolto, non durante la connessione. Non capisco come possa funzionare il ricciolo sopra.
Mikael Kjær,

2
0.0.0.0 è l'indirizzo IP al quale il servizio è associato nel contenitore e non significa nulla nel contesto dell'host che lo esegue. l'output sotto la colonna PORTI sta dicendo che la porta 80 del contenitore (0.0.0.0:80) è mappata sulla porta 80 localmente (80 / tcp), così come sulla porta 443 localmente.
Kevin,

1
No, non è lo stesso, ma come sottolineato, 0.0.0.0 non è un indirizzo IP, è un segnale per ascoltare che li voglio tutti, incluso localhost. Nel contesto della connessione sono uguali a meno che il servizio non sia associato a un IP specifico (localhost o IP esterno).
Gerry Gleason,

0

Credo che 127.0.0.1 sia per localhost.

Per ottenere l'id docker che è in esecuzione sul tuo Mac. Esegui "ifconfig" nel terminale e lo avrà nel risultato oltre a 127.0.0.1

Principalmente qualcosa come 192.168.xy

Spero che sia d'aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.