Я запустил простой контейнер Docker с Nginx, я хочу использовать этот Docker Nginx в качестве обратного прокси-сервера для моего приложения (HTTP Tomcat) на моем хосте. Но мой proxy_pass
работает только с неожиданным значением IP.
Ожидаемое поведение. Когда я использую docker inspect
в своем контейнере, мой шлюз — 172.29.0.1
, мой proxy_pass
должен работать с 172.29.0.1
.
Текущий: я должен использовать 172.18.0.1
в своем proxy_pass
, чтобы заставить его работать, и я не понимаю, почему это случайное значение работает. Если я не использую 172.18.0.1
, у меня возникает ошибка HTTP 502, а в моих журналах докеров отображается сообщение «В восходящем соединении отказано».
Мой Dockerfile (содержит только 1 строку):
FROM nginx
Мой docker-compose (я использую docker-compse up --build
для запуска своего контейнера):
version: '3'
services:
nginx-web:
image: nginx-web
container_name: nginx-web-container
build: .
ports:
- "80:80"
volumes:
- ./volume-sources/nginx-conf-files:/etc/nginx/conf.d/
Мой файл nginx (моё значение nginx-web
— это значение Gateway, равное 172.29.0.1
, но оно работает, если вручную установить для него значение 172.18.0.1
):
upstream upstream-nginx-web {
server nginx-web:8000;
}
server {
listen 80;
server_name my-site.com;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://upstream-nginx-web;
}
}
На моем хосте ip route
:
default via 192.168.1.1 dev wlp2s0
10.0.0.0/8 via 10.110.23.254 dev enp0s31f6
10.110.20.0/22 dev enp0s31f6 proto kernel scope link src 10.110.20.76 metric 100
169.254.0.0/16 dev enp0s31f6 scope link metric 1000
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
172.29.0.0/16 dev br-56b3c9a632cf proto kernel scope link src 172.29.0.1 linkdown
192.168.1.0/24 dev wlp2s0 proto kernel scope link src 192.168.1.101 metric 600
Еще одно странное поведение:
Я перезапустил свой контейнер с docker-compose up --build --force-recreate --always-recreate-deps
, но на этот раз мой шлюз — 172.17.0.1
, а обратный прокси-сервер работает, только если proxy_pass
использует этот IP-адрес: 172.19.0.1
.
Заметки:
- Моя версия докера: 18.06.1-ce
- Моя версия для создания докеров: 1.22.0
- Моя ОС: Ubuntu 18.04 LTS
- Я не использую PHP на своем хосте, у меня есть порт прослушивания сервера Tomcat с номером 8000.
host.docker.internal
иgateway.host.internal
доступны только в Windows и Mac, поэтому я используюnginx-web
(в моем файле Nginx), который является значением Gateway, автоматически устанавливаемым docker-compose.
Вопросы:
- Где моя ошибка?
- Что мне нужно изменить, чтобы заставить его работать и почему?
Спасибо
10.110.20.76
работает, но я его использовать не буду. Ваш ответ помог мне найти решение другим способом: заставить docker-compose использовать сеть Docker по умолчанию (docker0), чтобы исправить IP-адрес шлюза. - person Gugelhupf   schedule 22.08.2018