Hey all,
I'm trying to understand a bug in my setup. I need some debugging tips.
Lately, I've been using this traefik and consul tutorial.
Yesterday, I setup this up quite easily.
Next, I had deployed a second docker stack: this time a fullstack app with frontend and backend but I couldn't get both stacks communicating on a shared network.
"docker stack ls" showed both stacks working fine and running at a container level but I couldn't see the new frontends and backends in the traefik web ui. I only saw the Traefik and Consul frontends and backends from the tutorial.
My first thought was I needed to open up the firewall ports on digital ocean https://www.digitalocean.com/community/tutorials/how-to-configure-the-linux-firewall-for-docker-swarm-on-ubuntu-16-04 for each of my three nodes which are simply all manager nodes right now. Any ideas of what could be wrong with my setup?
-- EDIT --
Today I tried to simplify the problem with a one node swarm. I even added portainer successfully. So I now have more information to go through while debugging and a smaller problem space (one server) but still I have issues getting traefik to see my fullstack app containers. I find it very strange that I saw the number of frontends and backends update when I deployed the portainer stack but not my fullstack app which also used similar labels.
fullstack.yml
version: "3.7"
services:
client:
image: devpies/client-app:prod
networks:
- traefik-public
deploy:
restart_policy:
condition: on-failure
labels:
- traefik.frontend.rule=Host:client.example.io
- traefik.enable=true
- traefik.port=80
- traefik.protocol=https
- traefik.docker.network=traefik-public
# Traefik service that listens to HTTP
- traefik.redirectorservice.frontend.entryPoints=http
- traefik.redirectorservice.frontend.redirect.entryPoint=https
# Traefik service that listens to HTTPS
- traefik.webservice.frontend.entryPoints=https
api:
image: devpies/client-api:prod
networks:
- traefik-public
deploy:
labels:
- traefik.frontend.rule=Host:api.example.io
- traefik.enable=true
- traefik.port=4000
- traefik.protocol=https
- traefik.docker.network=traefik-public
# Traefik service that listens to HTTP
- traefik.redirectorservice.frontend.entryPoints=http
- traefik.redirectorservice.frontend.redirect.entryPoint=https
# Traefik service that listens to HTTPS
- traefik.webservice.frontend.entryPoints=https
restart_policy:
condition: on-failure
max_attempts: 3
networks:
traefik-public:
external: true
fixed: this file works. I needed the following label: - traefik.tags=traefik-public
version: "3.7"
services:
client:
image: devpies/client-app:prod
networks:
- traefik-public
deploy:
restart_policy:
condition: on-failure
labels:
- traefik.frontend.rule=Host:client.example.io
- traefik.enable=true
- traefik.port=80
- traefik.tags=traefik-public
- traefik.docker.network=traefik-public
# Traefik service that listens to HTTP
- traefik.redirectorservice.frontend.entryPoints=http
- traefik.redirectorservice.frontend.redirect.entryPoint=https
# Traefik service that listens to HTTPS
- traefik.webservice.frontend.entryPoints=https
api:
image: devpies/client-api:prod
networks:
- traefik-public
deploy:
labels:
- traefik.frontend.rule=Host:api.example.io
- traefik.enable=true
- traefik.port=4000
- traefik.tags=traefik-public
- traefik.docker.network=traefik-public
# Traefik service that listens to HTTP
- traefik.redirectorservice.frontend.entryPoints=http
- traefik.redirectorservice.frontend.redirect.entryPoint=https
# Traefik service that listens to HTTPS
- traefik.webservice.frontend.entryPoints=https
restart_policy:
condition: on-failure
max_attempts: 3
networks:
traefik-public:
external: true