#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, какую из этих сетей использовать.