Який IP-номер мого контейнера за допомогою Docker beta для mac?


28

Раніше я використовував інструментарій Docker і міг використовувати docker-machine inspect <machine-name>IP-адресу докер-машини, щоб переглянути сторінки, які контейнер обслуговує всередині.

Я перейшов до бета-клієнта docker (для mac) і не можу знайти, де розміщуються сторінки.

Я припускаю, тому що це докер чистий, а не докер-машина, я бачив би відкриті порти на localhost. Але вони не відкриті. Навіть через kitematic я переходжу до відкритого порту (80), але нічого не бачу.

$ 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 IP мого контейнера? Якщо ні, то де я можу знайти, що таке IP? Або у мене проблема з картографічним портом?

Відповіді:


25

Ви дивитесь на IP-адресу всередині контейнера, який є 172.17.0.2, і існує лише "всередині" контейнерів докера (і між ними).

IP-адреса, до якої потрібно підключитися, - це IP-адреса вашого хост-машини. Зробіть ifconfig на своєму Mac і знайдіть потрібний (як правило, 192.168.xy або 10.xyz). Localhost також повинен працювати поза контейнером.


5
Не впевнений, хто спростував це, але насправді це правильна відповідь. У Docker для Mac більше немає посередника VM з окремою машинною IP-адресою. При натисканні на хост (через IP або localhost) слід пересилати запити до контейнера, доки порти відображаються правильно.
DNJohnson

Спасибі. Мене збентежило, чому це було знято (двічі). Можливо тому, що це здається занадто простим, щоб бути фактичною відповіддю.
Mikael Kjær

Я не спростовував цього. Але я підозрюю, що існує підмножина користувачів, які з будь-якої причини ця відверта відповідь не працює (або не працює). Я маркую як правильно.
Синесо

2
Ну ось цікава річ - у OS X, коли я заходжу до свого xHyve VM за допомогою команди екрана та запускаю curl localhost: 8080 - я отримую відповідь від одного з контейнерів. Але якщо я те ж саме роблю в терміналі OS X - підключення відмовилося. Як це може статися?
mvmn

1
PS Це сталося з контейнером, створеним за допомогою docker-compose.
mvmn

8

введіть наступну команду, і ви отримаєте ваш контейнер докера ip

$docker inspect <docker-container-name>

Прокрутіть униз, і ви отримаєте IP-адресу в розділі " Налаштування мережі "


Дякую. Я знехтував зазначити, що я спробував це, і це не вийшло. Моє запитання оновлено.
Синесо

Правильно, але ви не можете це пінг. Я підозрюю, що саме тому вищенаведена правильна відповідь оскаржується. Питання, яке мені залишається, полягає в тому, чи є спосіб передати мережу на віртуальний хост. Віртуальний хост все ще є, якщо краще інтегруватися в MacOS, і я впевнений, що ви можете передати цей IP-адресу звідти, але чи не можу я передати цю мережу, щоб вони були локально доступними на Mac?
Геррі Глісон

6

Docker для Mac працює за IP-адресою 127.0.0.1


це не зовсім помилкове твердження: P
Jonas

Насправді це була найпростіша відповідь, яка вирішила мою проблему.
Джеймс

1

Адреса ip явно згадується у виході до 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"}

Крім того, localhostне те саме, що0.0.0.0


5
0.0.0.0 означає всі ip-адреси на поточній машині і зазвичай використовується під час прослуховування, а не підключення. Я не розумію, як би спрацював вищезазначений завиток.
Mikael Kjær

2
0,0.0,0 - це ip-адреса, на яку пов'язується служба в контейнері, і нічого не означає в контексті хоста, яким він працює. висновок під стовпцем PORTS говорить про те, що порт 80 контейнера (0,0.0,0:80) відображається на порт 80 локально (80 / tcp), а також порт 443 локально.
Кевін

1
Ні, це не те саме, але як зазначалося, 0.0.0.0 - це не IP-адреса, це сигнал для прослуховування, що я хочу всіх, включаючи localhost. У контексті підключення вони однакові, якщо служба не пов'язана з певним IP (localhost або зовнішній IP).
Геррі Глісон

0

Я вважаю, що 127.0.0.1 - це для localhost.

Щоб отримати ідентифікатор докера, який працює на вашому Mac. Запустіть "ifconfig" в терміналі, і він матиме його в результаті, крім 127.0.0.1

Переважно щось на зразок 192.168.xy

Сподіваюся, це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.