Как я могу ping мой контейнер докера с моего хозяина

Я создал Ubuntu Docker контейнер на моем Mac

CONTAINER ID  IMAGE   COMMAND      CREATED         STATUS         PORTS                 NAMES
5d993a622d23  ubuntu  "/bin/bash"  42 minutes ago  Up 42 minutes  0.0.0.0:123->123/tcp  kickass_ptolemy

Я установил порт как 123.

IP моего контейнера 172.17.0.2

docker inspect 5d993a622d23 | grep IP
"LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
                    "IPAMConfig": null,
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,

На моем Mac я пытаюсь пропинговать свой контейнер,

Ping 172.17.0.2, я получил тайм-аут запроса для icmp_seq 0....

Что я должен делать? Так что мой локальный компьютер может пропинговать установленный мной контейнер. Я пропустил установку какого-либо приложения в своем контейнере, который представляет собой простую систему Ubuntu?

Ответ 1

Вы не можете пропинговать или обращаться к интерфейсу контейнера напрямую с помощью Docker для Mac.

В настоящее время лучшим решением является подключение к вашим контейнерам из другого контейнера. В настоящее время мы не можем обеспечить маршрутизацию к этим контейнерам из-за проблем с OSX, которые Apple еще не решила. мы отслеживаем это требование, но в настоящее время мы ничего не можем с этим поделать.

Панель инструментов Docker/VirtualBox

При запуске Docker Toolbox, Docker Machine через VirtualBox или любую виртуальную машину VirtualBox (например, определение Vagrant) вы можете настроить "Сеть только для хоста" и через нее получить доступ к сети виртуальных машин Docker.

Если вы используете виртуальную машину boot2docker по default, не меняйте существующий интерфейс, так как вы остановите работу многих утилит Docker, добавьте новый интерфейс.

Вам также необходимо настроить маршрутизацию от вашего Mac до контейнерных сетей через новый IP-адрес вашей виртуальной машины. В моем случае диапазон сети Docker - 172.22.0.0/16 а IP адаптера Host Only на виртуальной 172.22.0.0/16 - 192.168.99.100.

sudo route add 172.22.0.0/16 192.168.99.100

Добавление постоянного маршрута в OSX немного сложнее

Тогда вы можете добраться до контейнеров с вашего Mac

machost:~ ping -c 1 172.22.0.2
PING 172.22.0.2 (172.22.0.2): 56 data bytes
64 bytes from 172.22.0.2: icmp_seq=0 ttl=63 time=0.364 ms

--- 172.22.0.2 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.364/0.364/0.364/0.000 ms

Ответ 2

В качестве альтернативы, если в вашем контейнере установлена ​​оболочка bash, вы можете получить к ней доступ через

docker exec -it <CONTAINER ID> bash

а затем вы можете выполнить ping ваш виртуальный ip

Ответ 3

Это работает в этом сценарии:

  1. Хост Windows
  2. Виртуальная машина Linux установлена на хосте Windows
  3. Контейнер Docker установлен на хосте Linux VM

Теперь вы должны это отметить. Контейнеры находятся в изолированной сети, но подключены к Интернету через ваш хост-адаптер контейнера Docker. Поэтому вы должны указать ядру linux, что он будет доступен в вашей сети, а затем на виртуальной машине Linux:

# sysctl net.ipv4.conf.all.forwarding=1
# sudo iptables -P FORWARD ACCEPT

Теперь на вашем хосте Windows вы должны добавить маршрут для нашей контейнерной сети: В маршрут добавьте "Сеть контейнеров Docker", "Linux VM IP", например,

# route add 172.17.0.0/16 192.168.1.20

Ответ 4

Настройка:

PC-A a - хост докера, PC-B - это другой компьютер в сети. Чтобы выполнить загрузку контейнера ping/access из PC-B, запустите ниже iptables -rules в хосте.

iptables -A FORWARD -i docker0 -o eth0 -j ACCEPT

iptables -A FORWARD -i eth0 -o docker0 -j ACCEPT

Примечание: eth0 - это интерфейс хоста, а docker0 - мост виртуального по умолчанию докеры.

Теперь добавьте маршрут в PC-B

route add -net <dockerip> netmask <net mask> gw <docker host>

службы ping/access container напрямую.

Ответ 5

Допустим, у вас есть W-> машина Windows, виртуальная машина L-Linux Vbox (eth0, eth1) и приложение докера (с использованием порта 8989), работающие на этой виртуальной машине L-Linux Vbox. Провайдеру в любом случае не требуется Vbox или W-> выигрыш. Вы хотите ввести http://app: 8989 в своем браузере. Есть два способа afak; простой способ запустить vagrant автоматически или вручную настроить Vbox VM с переадресацией портов через "Host-only Adapter", который фактически является eth1; обычно eth0 - это Vbox, по умолчанию зарезервированный. 10.0.2.15 Назначение IP-адреса. Или в командной строке на win/lin/mac с помощью команды "VBoxManage" вы можете настроить сети или автоматизировать их с помощью сценариев.

webtier.vm.network "forwarded_port", guest: 8989, host: 8989

запустить приложение Docker

sudo docker run -p 8989:8989 ...

в проводнике Windows (W-> Windows Machine) просмотрите ваше приложение

http://app:8989

Вы по-прежнему не можете пропинговать "172.17.0.2", который является IP-адресом контейнера докера в этой ситуации с W-> windows machine. Это может запустить кросс-платформенный win/lin/mac.Вы можете посмотреть Vbox Manual и Vagrant Manual, особенно сети.