【发布时间】:2019-10-29 16:49:02
【问题描述】:
我正在尝试在 Docker 中使用 Traefik 实现 SSL,但对于其中的几乎每个容器(Traefik 和 Prometheus 除外),我都收到错误“502 Bad Gateway” 即使在全新安装时,我也有同样的问题,并且我没有这些容器的错误日志(表明它们应该运行良好,并且不使用 Traefik,它们看起来确实不错)。我实现这些的方式有问题吗?或者我对 traefik 有什么误解?
我检查了端口是否可用、子域是否已添加到云 DNS 以及服务和网络是否已启动并正在运行。 我还尝试重新启动容器。 所有服务都可以不经过 Traefik 访问(直接在 url 中输入端口)
(X_SERVER变量在.env文件中,解析为变量如:grafana.mywebsite.com)
这是我的 docker-compose.yml:
version: '3'
networks:
private:
web:
external:
name: web
services:
# TRAEFIK
traefik:
image: traefik:maroilles-alpine
ports:
- "80:80"
- "443:443"
- "8200:8200"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./config/traefik/acme:/etc/traefik/acme
- ./config/traefik/traefik.toml:/etc/traefik/traefik.toml:ro
networks:
- web
labels:
- "traefik.enable=true"
- "traefik.frontend.rule=Host:${TRAEFIK_SERVER}"
- "traefik.port=8200"
- "traefik.docker.network=web"
restart: always
# PROMETHEUS
prometheus:
image: prom/prometheus:v2.0.0
container_name: prometheus
volumes:
- ./docker/prometheus/:/etc/prometheus
- prometheus-data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--storage.tsdb.retention=200h'
ports:
- "9090:9090"
depends_on:
- cadvisor
networks:
- web
- private
labels:
- "traefik.enable=true"
- "traefik.frontend.rule=Host:${PROMETHEUS_SERVER}"
- "traefik.port=9090"
- "traefik.docker.network=web"
restart: always
# CADVISOR
cadvisor:
image: google/cadvisor
container_name: cadvisor
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
ports:
- "8463:8080"
networks:
- private
labels:
- "traefik.enable=true"
- "traefik.frontend.rule=Host:${CADVISOR_SERVER}"
- "traefik.port=8463"
- "traefik.docker.network=web"
restart: always
# GRAFANA
grafana:
image: grafana/grafana:4.6.2
environment:
- GF_SERVER_ROOT_URL=${GRAFANA_SERVER}
container_name: grafana
volumes:
- grafana-data:/var/lib/grafana
ports:
- "3155:3000"
networks:
- web
- private
labels:
- "traefik.enable=true"
- "traefik.frontend.rule=Host:(GRAFANA_SERVER}"
- "traefik.port=3155"
- "traefik.docker.network=web"
restart: always
volumes:
prometheus-data: {}
grafana-data: {}
这是我的 traefik.toml:
debug = true
logLevel = "DEBUG"
defaultEntryPoints = ["https","http"]
[web]
address = ":8200"
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
[retry]
[acme]
email = "my.awesome@email.com"
storageFile = "/etc/traefik/acme/acme.json"
entryPoint = "https"
onHostRule = true
[acme.httpChallenge]
entryPoint = "http"
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "mywebsite.com"
watch = true
exposedByDefault = false
我希望在使用 HTTPS 时通过 Traefik 获得所有可用页面,但其中一些页面显示错误 502 Bad Gateway(例如 Grafana),其他页面按预期工作(Prometheus、Traefik),有些甚至无法访问(阿帕奇)。 如果我不使用 Traefik(因此,直接通过正确的端口访问,例如:http://mywebsite.com:3155)页面显示正确,但它不安全且不使用 Traefik
【问题讨论】:
标签: docker https docker-compose traefik