Який 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.