Restarting backend container became unreachable for traefik(504 Gateway timeout)

I’m having a problem and I can’t find a solution.

I have deployed a Django backend and a React frontend using Docker.

I’m using Traefik as a reverse proxy for the web server. When I start Traefik, the backend, and the frontend, everything works perfectly.

However, when I try to upgrade my apps, the backend becomes unreachable (504). To fix it, I have to restart Traefik and then start the backend after Traefik. After that, it works again.

This is my backend Docker Compose:

services:
  backend:
    image: backend-v3:latest
    container_name: dashboard-backend
    restart: always
    env_file:
      - ./dashboard/.dockerenv
    volumes:
      - .:/app
      - ./infra/static:/app/staticfiles
    networks:
      - traefik
      - db_network
    ports:
      - "8000:8000"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.django-api.rule=Host(`domain.com`)"
      - "traefik.http.routers.django-api.entrypoints=websecure"
      - "traefik.http.routers.django-api.tls=true"
      - "traefik.http.routers.django-api.tls.certresolver=myresolver"
      - "traefik.http.services.django-api.loadbalancer.server.port=8000"

    healthcheck:
      test: ["CMD-SHELL", "python3 -m urllib.request http://localhost:8000/health/ || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 5

networks:
  traefik:
    external: true
  db_network:
    external: true

And this is how I start Traefik:

#!/bin/bash
docker run -d \
  --name traefik \
  --network traefik \
  --restart=always \
  -p 80:80 \
  -p 443:443 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /opt/traefik/acme.json:/acme.json \
  -l "traefik.enable=true" \
  -l "traefik.http.routers.traefik.rule=Host(\"traefik.domain.com\")" \
  -l "traefik.http.routers.traefik.entrypoints=websecure" \
  -l "traefik.http.routers.traefik.tls.certresolver=myresolver" \
  -l "traefik.http.routers.traefik.middlewares=auth,redirect" \
  -l "traefik.http.middlewares.auth.basicauth.users=admin:$apr1$T1Xpq5XX$4AogYQokV4FbJLKOKwCBl0" \
  -l "traefik.http.middlewares.redirect.redirectscheme.scheme=https" \
  -l "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" \
  -l "traefik.http.services.traefik.loadbalancer.server.port=8080" \
  traefik:v3.1 \
    --api.insecure=false \
    --providers.docker=true \
    --entrypoints.web.address=:80 \
    --entrypoints.websecure.address=:443 \
    --certificatesresolvers.myresolver.acme.httpchallenge=true \
    --certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web \
    --certificatesresolvers.myresolver.acme.email=email.com \
    --certificatesresolvers.myresolver.acme.storage=/acme.json \
    --providers.docker.watch=true \
    --providers.docker.exposedbydefault=false
Вернуться на верх