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

Docker部署Traefik遇网关超时问题排查与解决

Debian服务器Docker+Traefik子域名网关超时问题排查与解决

在本地Debian服务器部署Docker多容器服务,尝试通过Traefik将子域名foo.myserver.local指向对应容器,但调用curl foo.myserver.local时出现网关超时,无法定位问题。

初始配置

foo容器配置(foo/docker-compose.yml)

services:
  foo:
    image: httpd:alpine
    container_name: foo
    ports:
      - '9999:80'
    volumes:
      - ./website:/usr/local/apache2/htdocs

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.cal.rule=Host(`foo.myserver.local`)"
      - "traefik.http.routers.cal.entrypoints=web"
      - "traefik.http.services.cal.loadbalancer.server.port=9999"

foo网站内容(foo/website/index.html)

Foo page

Traefik容器配置(traefik/docker-compose.yml)

services:
  traefik:
    image: traefik:v2.0
    container_name: traefik
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
    restart: unless-stopped
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

本地hosts文件配置

# /etc/hosts

127.0.0.1       localhost
192.168.3.17   myserver.local      myserver
192.168.3.17   foo.myserver.local  myserver


# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

测试结果

user@myserver:~$ curl myserver.local
404 page not found

user@myserver:~$ curl foo.myserver.local
Gateway Timeout

user@myserver:~$ curl 192.168.3.17
404 page not found

user@myserver:~$ curl 192.168.3.17:9999
Foo page

user@myserver:~$ curl localhost
404 page not found

user@myserver:~$ curl localhost:9999
Foo page

解决过程

步骤1:合并配置文件修复问题

将两个docker-compose.yml合并,并移除端口映射配置后,问题解决。合并后的配置如下:

# traefik/docker-compose.yml
services:
  traefik:
    image: traefik:v2.0
    container_name: traefik
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
    restart: unless-stopped
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  foo:
    image: httpd:alpine 
    container_name: foo
    volumes:
      - ./website:/usr/local/apache2/htdocs

    labels:
      - "traefik.http.routers.foo.rule=Host(`foo.myserver.local`)"

步骤2:拆分配置文件并使用外部网络

为保持配置文件独立性,使用Traefik自动创建的traefik_default外部网络,成功拆分配置文件并正常运行。拆分后的配置如下:

# traefik/docker-compose.yml
services:
  traefik:
    image: traefik:v2.0
    container_name: traefik
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
    restart: unless-stopped
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
# foo/docker-compose.yml
services:
  foo:
    image: httpd:alpine
    container_name: foo
    volumes:
      - ./website:/usr/local/apache2/htdocs
    networks:
      - traefik
    labels:
      - "traefik.http.routers.foo.rule=Host(`foo.myserver.local`)"

networks:
  traefik:
    name: traefik_default
    external: true

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:12:22