«Ожидание localhost» при попытке подключиться к подключенному порту с помощью docker-compose.Проблема с iptables или ipv6? - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть файл docker-compose.yml, который отображает порт следующим образом:

ports:
  - '81:3000'

и связан с контейнером mongodb следующим образом:

links:
  - mongo

В файле Dockerпорт 3000 выставлен примерно так:

EXPOSE 3000

(используется в express.js примерно так: app.listen(3000)

Но когда я пытаюсь открыть localhost: 81 в Firefox-esr,не загружает страницу и просто продолжает загружаться, говоря «В ожидании локального хоста».
Как узнать, чего он ждет и как решить эту проблему?


Я использую Debian9/ KDE с версией Docker 18.09.0, и я использую iptables и apparmor.Нужно ли добавить некоторые правила iptables, чтобы это работало?Не могу найти, какие правила мне нужно добавить, а правила типа -A INPUT -i docker0 -p tcp --dport 81 -j ACCEPT не работают.https://docs.docker.com/network/iptables/ мне пока не помогло.Может быть, мне нужны правила FORWARD?

sudo iptables -L -t nat показывает

Chain DOCKER (2 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            
DNAT       tcp  --  anywhere             anywhere             tcp dpt:27017 to:172.18.0.2:27017
DNAT       tcp  --  anywhere             anywhere             tcp dpt:81 to:172.18.0.3:3000

Сопоставление портов с docker container run отлично работает.

sudo lsof -i показывает:

docker-pr 28466       root    4u  IPv6 6484109      0t0  TCP *:27017 (LISTEN)
docker-pr 28587       root    4u  IPv6 6483733      0t0  TCP *:81 (LISTEN)

, что мне показалось странным, потому что я сейчас использую IPv4.Нужно ли добавлять net.ipv4.ip_forward=1 в /etc/sysctl.conf?

Запуск sudo tcpdump -X -s0 -w ~/tcpdumps/waitingforlocalhostdocker и открытие в wireshark показывает что-то вроде:

Source      Destination  Protocol  Info
172.18.0.3  172.18.0.2   SSL       Continuation Data
172.18.0.3  172.18.0.2   SSL       Continuation Data
172.18.0.2  172.18.0.3   TCP       27017 -> 52120 [ACK] Seq=1 Ack=56 Win=237 Len=0
172.18.0.2  172.18.0.3   TCP       27017 -> 52120 [PSH, ACK] Seq=1 Ack=56 Win=237 Len=239 [TCP segement of a reassembled PDU]

Может быть, мне нужно настроить переадресацию IP в ядре?Я уже пробовал это с net.ipv4.conf.all.forwarding, установленным в 1. Или, возможно, некоторые другие конфигурации ядра?

Как это исправить, чтобы я мог открыть localhost: 81?Скорее всего, я просто упускаю что-то тривиальное здесь.

...