Я установил экземпляр Google Compute Engine (GCE) с назначенным статическим IP-адресом. Моя цель - запустить контейнер Docker для osticket на этом экземпляре.
Я запустил контейнер Docker как обычно. Я могу подключиться с помощью Lynx из оболочки bash, запущенной внутри контейнера (lynx http://0.0.0.0).
Пожалуйста, поймите, я не профессионал в области сетевых технологий. Прочитав о сети Docker, я использовал эту предложенную команду iptables на экземпляре (iptables -t nat -L -n) и обнаружил IP-адрес (172.17.0.7), назначение которого для меня загадка:
Chain DOCKER (2 references)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 to:172.17.0.7:80
Однако я зарядил вперед и в оболочке экземпляра (вне контейнера) я запустил Lynx, подключившись к этому IP-адресу (172.17.0.7:80), и он подключился к веб-сайту osticket! Я предполагаю, что он подключен к контейнеру.
Полный вывод iptables был:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
MASQUERADE tcp -- 172.17.0.7 172.17.0.7 tcp dpt:80
Chain DOCKER (2 references)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 to:172.17.0.7:80
Итак, мой вопрос:
Теперь, когда я знаю, что контейнер докеров работает, и я могу добраться до него (по крайней мере, из экземпляра и через этот загадочный адрес), как получается, что внешний IP-адрес GCE должен подключаться через экземпляр и к этому контейнеру?
Пока не работает. Пытаясь подключиться из браузера моего ноутбука к этому внешнему IP-адресу, подключившись к порту 80, я получаю: «Этот сайт недоступен. XXX.XXX.XXX.XXX отказался подключиться». При подключении к порту 8080 я получаю сообщение «Этот сайт недоступен. Ответить на XXX.XXX.XXX.XXX потребовалось слишком много времени».
Я не могу найти исправление конфигурации, которое заставит его подключиться. Я могу успешно пропинговать этот внешний адрес, чтобы знать, что он к чему-то подключается. Я уверен, что статический IP-адрес назначен экземпляру osticket GCE.
Небольшая дополнительная информация: ранее я установил еще один GCE с контейнером Docker (Mattermost) с аналогичным внешним статическим IP. Внешний IP работал! Он без проблем соединился с контейнером. Я надеялся, что то же самое снова будет правдой. Не повезло.
[Edit: исправлена опечатка.]
Вам необходимо создать правило брандмауэра на https://console.cloud.google.com/networking/firewalls/list открыть порт 80 для входящего внешнего трафика.