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?

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.


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 ”


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


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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.