У меня есть файл 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?Скорее всего, я просто упускаю что-то тривиальное здесь.