Как я могу пинговать контейнер 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 / доступ к контейнерным услугам напрямую.
Он работает в этом случае:
- Windows-хост
- Linux VM установлен на хосте Windows
- контейнер 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