Eu recomendo trocar o proxy reverso nginx estaticamente definido para trafik que está ciente do swarm e pode se reconfigurar dinamicamente conforme os serviços são implementados e destruídos.
Veja uma amostra de implementação:
-
crie uma rede para o traefik falar com contêineres:
docker network create proxy
-
Faça um traefik.toml, aqui está um exemplo:
traefik.toml
accessLogsFile = "/proc/1/fd/1"
defaultEntryPoints = ["http"]
[entryPoints]
[entryPoints.http]
address = ":80"
[web]
address = ":8080"
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "localhost"
watch = true
swarmmode = true
constraints = ["tag==frontend"]
- Exemplo de composição de arquivo para trafik:
docker-compose.traefik.yml
version: '3'
networks:
proxy:
external:
name: proxy
services:
traefik:
image: traefik:latest
volumes:
- ./traefik.toml:/etc/traefik/traefik.toml:ro
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 80:80
- 8080:8080
networks:
- proxy
restart: unless-stopped
- Configure seu aplicativo com marcadores e na mesma rede.
docker-compose.app.yml
version: '3'
networks:
proxy:
external: true
services:
webtest:
image: nginx:latest
networks:
- default
- proxy
labels:
- traefik.frontend.rule=PathPrefixStrip:/webtest
- traefik.port=80
- traefik.docker.network=proxy
- traefik.tags=frontend
restart: unless-stopped
A regra acima usa os prefixos de caminho do contêiner para simplificar, mas você pode usar qualquer regra que preferir para o proxy do seu aplicativo.