Я знаю, что NGINX можно настроить внутри собственного док-контейнера и связать с другими работающими контейнерами, но это займет много времени для настройки и тестирования.
Краткий ответ
Если вы не хотите запускать nginx в своем собственном контейнере, вы можете создать докерскую сеть с фиксированным диапазоном IP-адресов:
docker network create --driver=bridge --subnet=192.168.100.0/24 nginx.docker
И запустить свой контейнер с фиксированным IP
docker run --net nginx.docker --ip 192.168.100.1 ...
См. Docker Network Create и Назначение статического IP-адреса для контейнера Docker
Длинный ответ
Но я все равно предложил бы запуститьТакже nginx в контейнере, тогда Docker позаботится о разрешении DNS и маршрутизации.Это на самом деле быстро сделано и довольно просто.Вы можете либо определить все службы в одном docker-compose.yml
и убедиться, что они все совместно используют одну сеть, либо:
- Создать сеть Docker с помощью
docker network create nginx.docker
- Добавить сеть в
docker-compose.yml
файлов ваших услуг - Настройте
nginx.conf
Например:
nginx
docker-compose.yml
из nginx
services:
nginx:
image: nginx:alpine
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- type: bind
source: ./nginx.conf
target: /etc/nginx/nginx.conf
networks:
- nginx.docker
networks:
nginx.docker:
name: nginx.docker
external: true
Обратите внимание, что "80:80"
будет привязан ко всем интерфейсам, используйте IP-адрес интерфейса, например, "192.168.0.1:80:80"
для привязки только к одному конкретному интерфейсу.
Ваш сервисный контейнер
docker-compose.yml
services:
my_service:
image: image_name
container_name: myservice
networks:
- nginx.docker
networks:
nginx.docker:
name: nginx.docker
external: true
nginx config
В разделе сервера вашего nginx.conf
:
server {
listen 443 ssl;
server_name your.server.name;
# Docker DNS
resolver 127.0.0.11;
set $upstream_server http://myservice:8080; # or myservice.nginx.docker
location / {
proxy_pass $upstream_server;
# further proxy config ...
}
}
Обратите внимание на resolver 127.0.0.11
, явно говорящийnginx использовать докер DNS.Не уверен, что это все еще нужно, но у меня были проблемы раньше, когда я его не использовал.