Какой IP-адрес у моего контейнера, используя бета-версию Docker для Mac?

21

Ранее я использовал инструментарий Docker и мог использовать docker-machine inspect <machine-name> найти IP-адрес докера, чтобы просмотреть страницы, обслуживаемые контейнером внутри.

Я обновился до бета-клиента Docker (для Mac) и не могу найти, где страницы обслуживаются.

Я предполагаю, потому что это чистый докер, а не докер-машина, я бы увидел открытые порты на локальном хосте. Но они не открыты. Даже через 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? Или у меня проблема с отображением портов?

Synesso
источник

Ответы:

20

Вы смотрите на IP-адрес внутри контейнера, который является 172.17.0.2 и существует только «внутри» док-контейнеров (и между ними).

IP-адрес, к которому вы хотите подключиться, является IP-адресом вашего хост-компьютера. Сделайте ifconfig на вашем Mac и найдите правильный (обычно 192.168.x.y или 10.x.y.z). Localhost также должен работать снаружи контейнера.

Mikael Kjær
источник
3
Не уверен, кто это отрицал, но это действительно правильный ответ. С Docker для Mac больше нет промежуточной виртуальной машины с отдельным IP-адресом машины. Попадание на хост (через IP или localhost) должно пересылать запросы к контейнеру, если порты сопоставлены правильно.
DNJohnson
Благодарю. Я был смущен, почему это было понижено (дважды). Возможно, потому что это кажется слишком простым, чтобы быть реальным ответом.
Mikael Kjær
Я не понизил это. Но я подозреваю, что есть подмножество пользователей, которые по какой-то причине этот прямой ответ не работает (или не работал). Я отмечаю как правильный.
Synesso
2
Ну вот интересная вещь - на OS X, когда я захожу на свою виртуальную машину xHyve с помощью экранной команды и запускаю curl локальный: 8080 - Я получаю ответ от одного из контейнеров. Но если я сделаю то же самое в терминале OS X - соединение отклонено Как это может случиться?
mvmn
1
Постскриптум Это произошло с контейнером, созданным с помощью docker-compose.
mvmn
7

введите следующую команду, и вы получите свой IP док-контейнера

$docker inspect <docker-container-name>

Прокрутите вниз и вы получите IP-адрес в разделе " Сетевые настройки "

Riddhi Gohil
источник
Спасибо. Я не упомянул, что попробовал это & ​​amp; это не сработало. Мой вопрос был обновлен.
Synesso
Да, но вы не можете пинговать это. Я подозреваю, что именно поэтому вышеупомянутый правильный ответ получает отрицание. Вопрос, который у меня остался, заключается в том, существует ли способ подключения к сети на виртуальном хосте. Виртуальный хост все еще там, если его лучше интегрировать в MacOS, и я уверен, что вы можете пропинговать эти IP-адреса оттуда, но я не могу подключиться к этой сети, чтобы они были локально доступны на Mac?
Gerry Gleason
4

Docker для Mac работает на IP-адресе 127.0.0.1

digitaldavenyc
источник
это не совсем ложное утверждение: P
jonas
На самом деле, это был самый простой ответ, который решил мою проблему.
James
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

Synesso
источник
5
0.0.0.0 означает все IP-адреса на текущем компьютере и обычно используется при прослушивании, а не при подключении. Я не понимаю, как вышеупомянутый локон будет даже работать.
Mikael Kjær
1
0.0.0.0 - это ip-адрес, с которым служба связана в контейнере, и ничего не значит в контексте хоста, на котором он работает. вывод под столбцом PORTS говорит, что порт 80 контейнера (0.0.0.0:80) сопоставлен с портом 80 локально (80 / tcp), а также с портом 443 локально.
Kevin
1
Нет, это не то же самое, но, как указывалось, 0.0.0.0 - это не IP-адрес, это сигнал для прослушивания того, что я хочу всех из них, включая localhost. В контексте подключения они одинаковы, если служба не привязана к определенному IP-адресу (локальный хост или внешний IP-адрес).
Gerry Gleason