Приложение состоит из нескольких сервисов, перед которыми мы используем nginx в качестве веб-сервера. И мы развернем все эти сервисы, включая nginx, в docker swarm.
docker-compose.yaml:
version: '3'
services:
sa:
image: xx.com/service-a
sb:
image: xx.com/service-b
sc:
image: xx.com/service-c
....
gateway:
image: nginx
volumes:
- /nginx.conf:/etc/nginx/conf.d/default.conf:ro
networks:
overlay:
nginx.conf:
location / {
proxy_pass http://sa;
}
location /sb/ {
proxy_pass http://sb;
}
location /sc/ {
proxy_pass http://sc;
}
......
Пока что такхорошо, однако, когда запускается стек и если одна из служб (скажем, sc
) не запускается, это также приведет к невозможности запуска nginx
, что делает наше приложение недоступным.
Кажетсянапример, встроенный dns-сервер от docker не может разрешить хост sc
, поскольку он еще не запущен.
Мы не хотим, чтобы один сервис влиял на все приложение, и звучит так, как это можно описатькак другой вопрос: «как позволить nginx игнорировать доступность апстрима / прокси во время запуска». Пока после поиска нет решения. Есть идеи?