You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Traefik 2+Docker Swarm反向代理配置遇Bad Gateway错误求助

Traefik 2 + Docker Swarm反向代理"Bad Gateway"问题排查与解决

环境说明

  • 3台VirtualBox虚拟机:master.ox(Docker Swarm管理节点)、worker1.ox(工作节点)、worker2.ox(工作节点)
  • /etc/hosts配置:
192.168.56.101  master.ox traefik.master.ox hello.master.ox
192.168.56.102  worker1
192.168.56.103  worker2

已执行操作

  1. 在master.ox初始化Swarm并创建overlay网络:
docker swarm init --advertise-addr 192.168.56.101
docker network create --driver overlay my-net
  1. 在worker1和worker2执行命令加入Swarm:
docker swarm join --token SWMTKN-1-2jcok5sisa5kohn1nqqwpnasnj3t7hs7vs7c1cellf1eloyja6-16mnbgywkbpc5ssccw5anu0to 192.168.56.101:2377
  1. 为工作节点设置标签:
docker node update --label-add=category=service worker1
docker node update --label-add=category=service worker2

使用的Docker Compose配置

version: "3.3"
        
networks: 
  my-net:
    external: true

services:
  nginx: 
    image: nginxdemos/hello
    networks: 
      - my-net
    deploy: 
      labels: 
        - "traefik.enable=true"
        - "traefik.docker.network=my-net"
        - "traefik.http.services.nginx.loadbalancer.server.port=80"
        - "traefik.http.routers.nginx.entrypoints=http"
        - "traefik.http.routers.nginx.service=nginx"
        - "traefik.http.routers.nginx.rule=Host(`hello.master.ox`)"
      placement:
        constraints:
          - node.labels.category==service

  traefik: 
    image: traefik:latest
    ports: 
      - 8080:8080
      - 80:80
    command: 
      - "--log.level=DEBUG"
      - "--providers.docker"
      - "--providers.docker.swarmmode=true"
      - "--providers.docker.network=my-net"
      - "--providers.docker.endpoint=unix:///var/run/docker.sock"
      - "--providers.docker.exposedbydefault=false"
      - "--api=true"
      - "--ping=true"
      - "--api.insecure=true"
      - "--api.dashboard=true"
      - "--entrypoints.http.address=:80"
      - "--entrypoints.https.address=:443"
    volumes: 
      - /var/run/docker.sock:/var/run/docker.sock
    networks: 
      - my-net
    deploy: 
      mode: global
      labels: 
        - "traefik.enable=true"
        - "traefik.docker.network=my-net"
        - "traefik.http.services.traefik.loadbalancer.server.port=8080"
        - "traefik.http.routers.traefik.entrypoints=http"     
        - "traefik.http.routers.traefik.service=api@internal"
        - "traefik.http.routers.traefik.rule=Host(`traefik.master.ox`)"
      placement:
        constraints:
          - node.role == manager

问题描述

配置部署完成后,访问hello.master.ox时出现**"Bad Gateway"**错误,预期应显示nginx默认欢迎页面。


排查与解决方案

1. 确认Overlay网络连通性

"Bad Gateway"核心原因是Traefik无法连接到后端Nginx服务,首先验证网络连通性:

  • 进入Traefik容器,ping Nginx服务名:
    docker exec -it $(docker ps -q --filter name=traefik) ping nginx
    
  • 如果ping不通,检查:
    • Nginx服务是否正确挂载my-net网络:
      docker service inspect nginx | grep Networks
      
    • 若存在子网冲突(比如VirtualBox子网与Docker默认overlay子网重叠),重新创建指定子网的overlay网络:
      docker network rm my-net
      docker network create --driver overlay --subnet=10.10.0.0/24 my-net
      

2. 修正Nginx服务的Traefik标签配置

在Swarm模式下,需要明确指定服务的路由指向Docker Swarm服务,修改Nginx的deploy.labels:

labels: 
  - "traefik.enable=true"
  - "traefik.docker.network=my-net"
  - "traefik.http.services.nginx.loadbalancer.server.port=80"
  - "traefik.http.services.nginx.loadbalancer.server.scheme=http"
  - "traefik.http.routers.nginx.entrypoints=http"
  - "traefik.http.routers.nginx.service=nginx@docker"  # 明确指定为Swarm服务
  - "traefik.http.routers.nginx.rule=Host(`hello.master.ox`)"

3. 查看Traefik Debug日志定位具体错误

通过日志获取详细连接失败原因:

docker service logs traefik
  • 若日志显示dial tcp <nginx-ip>:80: connect: connection refused,检查Nginx容器状态:
    docker service ps nginx  # 确认服务是否正常运行
    docker exec -it $(docker ps -q --filter name=nginx) netstat -tulpn | grep 80  # 确认80端口是否监听
    

4. 重新部署服务

修改配置后,重新部署Stack:

docker stack deploy -c docker-compose.yml proxy

等待服务更新完成后,再次访问hello.master.ox即可正常显示Nginx页面。


内容的提问来源于stack exchange,提问作者Amir.Ojvar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:35:21