У меня на хосте работают 2 док-контейнера, web1 и web2. Контейнер web1 отображает порт 8080 на порт 18080 хоста, а web2 отображает порт 8080 на порт 28080 хоста. IP-адрес хоста - 192.168.20.111 (да, это локальная сеть). Я могу получить доступ к 192.168.20.111:18080 и 192.168.20.111:28080 с других машин в той же локальной сети.
Когда я пытался получить доступ к 192.168.20.111:18080 (curl 192.168.20.111:18080) или 192.168.20.111:28080 из контейнера web1 / web2, я получил ошибку тайм-аута.
Однако к серверу Apache, работающему через порт 8080 хоста, можно получить доступ 192.168.20.111:8080 из контейнера web1 / web2, что означает, что маршрут от контейнера к хосту свободен.
Итак, мой вопрос: почему возникает ошибка тайм-аута и как получить доступ к 192.168.20.111:18080 из контейнера Docker?
Это файл docker-compose, который я использовал для запуска web2 (web1 почти такой же):
version: '2'
services:
web:
build: .
ports:
- "28080:8080"
expose:
- "8080"
environment:
- TALENTS_AUTH_HOST=192.168.20.111
- TALENTS_AUTH_PORT=18080
- TALENTS_ANALYSIS_HOST=192.168.20.111
- TALENTS_ANALYSIS_PORT=18082
И это вывод curl:
root@ea49393e56a4:/# curl -v http://192.168.20.111:28080
* Rebuilt URL to: http://192.168.20.111:28080/
* Trying 192.168.20.111...
* TCP_NODELAY set
* connect to 192.168.20.111 port 28080 failed: Connection timed out
* Failed to connect to 192.168.20.111 port 28080: Connection timed out
* Closing connection 0
curl: (7) Failed to connect to 192.168.20.111 port 28080: Connection timed out
root@ea49393e56a4:/#
Это ip-маршрут контейнера web2:
root@ea49393e56a4:/# ip route
default via 172.25.0.1 dev eth0
172.25.0.0/16 dev eth0 proto kernel scope link src 172.25.0.2
root@ea49393e56a4:/#
Это вывод curl с использованием шлюза ip:
root@ea49393e56a4:/# curl -v http://172.25.0.1:28080
* Rebuilt URL to: http://172.25.0.1:28080/
* Trying 172.25.0.1...
* TCP_NODELAY set
* connect to 172.25.0.1 port 28080 failed: Connection timed out
* Failed to connect to 172.25.0.1 port 28080: Connection timed out
* Closing connection 0
curl: (7) Failed to connect to 172.25.0.1 port 28080: Connection timed out
root@ea49393e56a4:/#
И, кстати, хост-машина (192.168.20.111) - это виртуальная машина VirtualBox с Ubuntu-16.04, размещенная на рабочем столе Windows-10 с использованием мостовой сети для подключения к локальной сети.