Как я могу пинговать контейнер docker с моего хоста

Я создал контейнер 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?

4 ответов


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

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

Докер Toolbox / VirtualBox

при запуске Docker Toolbox, Docker Machine через VirtualBox или любую виртуальную машину VirtualBox (например,Бродяга определением) вы можете настроить "Host-Only Network" и получить доступ к сети Docker VMs через это.

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

вам также необходимо настроить маршрутизацию от вашего Mac к контейнерным сетям через новый IP-адрес вашей виртуальной машины. В моем случае диапазон сети Docker -172.22.0.0/16 и принимающей только адаптер IP на ВМ 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

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

docker exec -it <CONTAINER ID> bash

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


настройка:

PC-A a-хост докера,PC-B является еще одним ПК в сети. Для ping / доступа к контейнеру docker из PC-B выполните ниже iptables-правила в принимающей.

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

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

Примечание: eth0 интерфейс хоста и docker0 виртуальный мост по умолчанию docker.

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

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

ping / доступ к контейнерным услугам напрямую.


Он работает в этом случае:

  1. Windows-хост
  2. Linux VM установлен на хосте Windows
  3. контейнер Docker, установленный на хосте виртуальной машины Linux

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

sysctl-переменной сеть.протокол IPv4.conf.все.пересылка=1

sudo iptables-P вперед принять

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

маршрут добавить 172.17.0.0/16 192.168.1.20

Blockquote