Назад | Перейти на главную страницу

подключение к серверу apache в контейнере докеров (osx и докер-машина) ИЗ ИНТЕРНЕТА

Короче говоря, все работает, пока я не попытаюсь получить доступ к своему серверу apache в контейнере докера из Интернет. Входящие пакеты достигают контейнера докеров, но исходящие пакеты отбрасываются интерфейсом NAT на машине-докере.

Моя установка

что я могу сделать

что я пробовал

Я сузил проблему (используя tcpdump и другие эксперименты), когда я подключаюсь к веб-серверу в контейнере с компьютера в моей локальной сети, пакеты проходят через мостовой интерфейс (192.168.1.102) в докер-машине. Когда я подключаюсь из Интернета, входящий пакет проходит через 192.168.1.102, а пакет возврата - нет. Вместо этого он проходит через интерфейс NAT на докер-машине и сбрасывается. Я доказал это, выполнив команду «ifconfig eth0 down» на интерфейсе NAT изнутри docker-машины. Теперь, очевидно, это портит мою докер-машину, потому что я больше не могу запускать команды докера, и это убивает мой текущий сеанс ssh. Но когда я это сделал, подключение к веб-серверу в контейнере из Интернета работает! Итак, я доказал, что проблема в обратном пакете.

Сейчас, Могу ли я использовать iptables внутри docker-machine для правильной маршрутизации пакета, чтобы он выходил через мостовой интерфейс вместо интерфейса NAT? Я пробовал безуспешно. Вот мои правила iptables на докер-машине. Я хочу маршрутизировать любые пакеты, поступающие из моего контейнера, с исходным портом 11111 и направлять их на eth1 (мостовой интерфейс).

sudo iptables -I FORWARD 1 -i docker0 -o eth1 -p tcp --syn --sport 11111 -m conntrack --ctstate NEW -j ACCEPT

docker@default:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp spt:11111 flags:FIN,SYN,RST,ACK/SYN ctstate NEW
DOCKER-ISOLATION  all  --  anywhere             anywhere
DOCKER     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain DOCKER (1 references)
target     prot opt source               destination

Chain DOCKER-ISOLATION (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

Я все неправильно делаю? Есть ли стандартный способ настройки, который я еще не изучал?