Неисправный шлюз в traefik docker

#docker #devops #traefik #drone

#docker #devops #traefik #drone.io

Вопрос:

Я собираю traefik с помощью cloudflare CDN. Я использовал команду запуска контейнера docker для выполнения моего контейнера docker, выполняемого Drone CI. У меня возникла проблема, когда я успешно создал контейнер docker, что привело к неисправному шлюзу на поддомене.

docker-compose.yml

 version: '3'

services:
  traefik:
    image: traefik:latest
    container_name: traefik
    restart: always
    domainname: ${DOMAINNAME}
    networks:
      - traefik_proxy
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    environment:
      - CF_API_EMAIL=${CLOUDFLARE_EMAIL}
      - CF_API_KEY=${CLOUDFLARE_API_KEY}
    labels:
      - "traefik.enable=true"
      - "traefik.backend=traefik"
      - "traefik.frontend.rule=Host:monitor.${DOMAINNAME}"
      - "traefik.port=8080"
      - "traefik.docker.network=traefik_proxy"
      - "traefik.frontend.headers.SSLRedirect=true"
      - "traefik.frontend.headers.STSSeconds=315360000"
      - "traefik.frontend.headers.browserXSSFilter=true"
      - "traefik.frontend.headers.contentTypeNosniff=true"
      - "traefik.frontend.headers.forceSTSHeader=true"
      - "traefik.frontend.headers.SSLHost=example.com"
      - "traefik.frontend.headers.STSIncludeSubdomains=true"
      - "traefik.frontend.headers.STSPreload=true"
      - "traefik.frontend.headers.frameDeny=true"
      - "traefik.frontend.auth.basic.users:${HTTP_USERNAME}:${HTTP_PASSWORD}"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /etc/traefik:/etc/traefik
      - /etc/docker/shared:/shared

networks:
  traefik_proxy:
    external:
      name: traefik_proxy
  

Traefik.toml

 nsecureSkipVerify = true
defaultEntryPoints = ["https", "http"]

# WEB interface of Traefik - it will show web page with overview of frontend and backend configurations
[api]
  entryPoint = "traefik"
  dashboard = true
  address = ":8080"

# Force HTTPS
[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]

# Let's encrypt configuration
[acme]
email = "example@gmail.com" #any email id will work
storage="acme.json"
entryPoint = "https"
acmeLogging=true
onDemand = false #create certificate when container is created
[acme.dnsChallenge]
  provider = "cloudflare"
  delayBeforeCheck = 300
[[acme.domains]]
   main = "example.com"
[[acme.domains]]
   main = "*.example.com"

# Connection to docker host system (docker.sock)
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "example.com"
watch = true
# This will hide all docker containers that don't have explicitly
# set label to "enable"
exposedbydefault = false
  

Команда, которую я использовал для запуска контейнера docker, выполняемого дроном:

запуск контейнера docker -d —назовите пример-разработка —перезапуск =еслине остановлен —ярлык «traefik.backend=пример-разработка» —ярлык «traefik.frontend.rule=Host:subdomain.example.com » -метка «traefik.enable=false» -метка «traefik.port=6611» -выставить 6611 cloud.canister.io: 5000/имя пользователя / репозиторий

Мой контейнер docker прослушиваетhttp://127.0.0.1:6611

Приведенные выше примеры кодов приводят к ошибке 504 Gateway Timeout.

Ответ №1:

У Traefik должна быть общая сеть с контейнерами, к которым он подключается. В этом случае вам нужно запускать контейнеры с --net=traefik_proxy .

Если ваш контейнер находится в нескольких сетях, вам также понадобится метка traefik.docker.network=traefik_proxy , чтобы указать traefik, какую из этих сетей использовать.