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

使用Traefik代理在同一服务器部署两个独立子域名服务

解决Traefik路由504网关超时问题

你的配置存在几个关键问题导致了504错误,修复后的完整Docker Compose配置如下:

version: '3'
services:
  traefik:
      image: traefik:latest
      restart: always
      command:
        - --accesslog
        - --api.insecure=true
        - --providers.docker
        - --providers.docker.exposedbydefault=false
      volumes:
        - /var/run/docker.sock:/var/run/docker.sock
      ports:
        - "80:80"
        - "8080:8080"
      networks:
        - fullstack  # 让Traefik加入服务所在的自定义网络
  service1:
    image: ghcr.io/user/service1:latest
    restart: always
    # 移除宿主机端口映射,Traefik通过内部网络访问服务
    networks:
      - fullstack 
    labels:
      - traefik.enable=true
      - traefik.http.routers.service1.rule=Host(`service1.domain.com`)
      # 指定转发到服务内部的8080端口
      - traefik.http.services.service1.loadbalancer.server.port=8080
  service2:
    image: ghcr.io/user/service2:latest  # 修正镜像名称拼写错误
    restart: always
    # 移除宿主机端口映射
    labels:
      - traefik.enable=true
      - traefik.http.routers.service2.rule=Host(`service2.domain.com`)
      - traefik.http.services.service2.loadbalancer.server.port=8080
    networks:
      - fullstack 

networks:
  fullstack:
    driver: bridge

关键修改说明:

  • Traefik加入自定义网络:原配置中Traefik默认使用Docker默认网络,而你的服务在fullstack自定义网络内,跨网络无法通信,必须将Traefik也加入该网络。
  • 移除宿主机端口映射:服务不需要暴露8081、8082到宿主机,Traefik通过Docker内部网络直接访问服务的8080端口,暴露外部端口无必要且存在安全隐患。
  • 添加服务端口指定标签:Traefik需要明确知道请求要转发到服务的哪个端口,因此需添加traefik.http.services.xxx.loadbalancer.server.port=8080标签,对应服务内部监听的8080端口。
  • 修正镜像名称拼写错误:service2的镜像名原配置写成了serice2,改为正确的service2避免镜像拉取失败。

重启Docker Compose后,访问service1.domain.com和service2.domain.com即可正常路由到对应服务。

内容的提问来源于stack exchange,提问作者themiDdlest

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:54:20