Как я могу 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
Это работает в этом сценарии:
- Хост Windows
- Виртуальная машина Linux установлена на хосте Windows
- Контейнер 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, особенно сети.