Jaki jest numer IP mojego kontenera używającego Docker w wersji beta na komputery Mac?

28

Wcześniej korzystałem z zestawu narzędzi Docker i mogłem docker-machine inspect <machine-name>znaleźć adres IP maszyny dokującej, aby wyświetlić strony obsługiwane przez kontener.

Uaktualniłem do klienta beta dokera (dla komputerów Mac) i nie mogę znaleźć, gdzie strony są obsługiwane.

Zakładam, ponieważ ponieważ jest to okno dokowane, a nie maszyna dokująca, widziałbym odsłonięte porty na localhost. Ale nie są otwarte. Nawet przez kitematic nawiguję do odsłoniętego portu (80), ale nic nie widzę.

$ 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

Czy 172.17.0.2 to naprawdę adres IP mojego kontenera? Jeśli nie, gdzie mogę znaleźć adres IP? Czy mam problem z mapowaniem portów?

Synesso
źródło

Odpowiedzi:

25

Patrzysz na adres IP wewnątrz kontenera, który jest 172.17.0.2 i istnieje tylko „wewnątrz” kontenerów dokera (i między nimi).

Adres IP, z którym chcesz się połączyć, to adres IP komputera-hosta. Wykonaj ifconfig na komputerze Mac i znajdź właściwy (zazwyczaj 192.168.xy lub 10.xyz). Localhost powinien również działać spoza kontenera.

Mikael Kjær
źródło
5
Nie jestem pewien, kto ocenił to, ale tak naprawdę jest to poprawna odpowiedź. Dzięki Docker dla komputerów Mac nie ma już pośredniej maszyny wirtualnej z osobnym adresem IP maszyny. Uderzenie w host (za pośrednictwem adresu IP lub hosta lokalnego) powinno przekazywać żądania do kontenera, o ile porty są poprawnie zmapowane.
DNJohnson
Dzięki. Byłem zdezorientowany, dlaczego zostało to zanegowane (dwukrotnie). Może dlatego, że po prostu wydaje się zbyt prosta, aby być rzeczywistą odpowiedzią.
Mikael Kjær
Nie głosowałem za tym. Podejrzewam jednak, że istnieje podzbiór użytkowników, którzy z jakiegokolwiek powodu ta prosta odpowiedź nie działa (lub nie działa). Zaznaczam jako poprawne.
Synesso,
2
Cóż, oto interesująca rzecz - w systemie OS X, kiedy idę do mojej maszyny wirtualnej xHyve za pomocą polecenia screen i uruchamiam curl localhost: 8080 - otrzymuję odpowiedź z jednego z kontenerów. Ale jeśli zrobię to samo w terminalu OS X - połączenie zostanie odrzucone. Jak to się może stać?
mvmn
1
PS Zdarzyło się to z kontenerem utworzonym za pomocą docker-compose.
mvmn
8

wpisz następujące polecenie, a otrzymasz kontener dokera ip

$docker inspect <docker-container-name>

Przewiń w dół, a zobaczysz adres IP w „ NetworkSettings

Riddhi Gohil
źródło
Dziękuję Ci. Zlekceważyłem wspomnieć, że próbowałem tego i to nie działało. Moje pytanie zostało zaktualizowane.
Synesso
Racja, ale nie możesz pingować. Podejrzewam, że właśnie dlatego powyższa poprawna odpowiedź została odrzucona. Pozostaje mi pytanie, czy istnieje sposób na połączenie z siecią na wirtualnym hoście. Wirtualny host jest nadal dostępny, jeśli jest lepiej zintegrowany z MacOS, i jestem pewien, że możesz pingować stamtąd te adresy IP, ale czy nie mogę połączyć się z tą siecią, aby były dostępne lokalnie na komputerze Mac?
Gerry Gleason,
6

Docker dla komputerów Mac działa pod adresem IP 127.0.0.1

digitaldavenyc
źródło
to nie jest całkowicie fałszywe stwierdzenie: P
jonas
W rzeczywistości była to najprostsza odpowiedź, która rozwiązała mój problem.
James
1

Adres IP jest wyraźnie wymieniony w danych wyjściowych do 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"}

Co więcej, localhostto nie to samo, co0.0.0.0

Synesso
źródło
5
0.0.0.0 oznacza wszystkie adresy IP na bieżącym komputerze i jest zwykle używany podczas nasłuchiwania, a nie łączenia. Nie rozumiem, jak powyższe zawinięcie mogłoby nawet działać.
Mikael Kjær
2
0.0.0.0 to adres IP, z którym usługa jest powiązana w kontenerze, i nic nie znaczy w kontekście hosta, który go uruchamia. dane wyjściowe w kolumnie PORTS mówią, że port 80 kontenera (0.0.0.0:80) jest mapowany lokalnie na port 80 (80 / tcp), a także lokalnie na port 443.
Kevin
1
Nie, to nie to samo, ale jak już wspomniano, 0.0.0.0 nie jest adresem IP, to sygnał do wysłuchania, że ​​chcę ich wszystkich, w tym localhost. W kontekście łączenia są one takie same, chyba że usługa jest powiązana z określonym adresem IP (localhost lub zewnętrzny adres IP).
Gerry Gleason
0

Uważam, że 127.0.0.1 jest dla hosta lokalnego.

Aby uzyskać identyfikator dokera, który działa na komputerze Mac. Uruchom „ifconfig” w terminalu, aby uzyskać wynik oprócz 127.0.0.1

Głównie coś takiego jak 192.168.xy

Mam nadzieję, że to pomoże.

Tuananhcwrs
źródło