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

如何在Traefik中配置DDNS实现本地服务公网访问?

Traefik 使用DDNS域名无法外部访问问题描述
  • 已完成操作1:No-Ip DDNS配置
    • 主机名:myhost.ddns.net
    • 目标/IP:my-external-ip
    • 类型:A
  • 已完成操作2:路由器端口转发配置
    https端口转发
    http端口转发
  • 已完成操作3:配置文件编写
    1. docker-compose.yml内容:
    version: '3.7'
    
    services:
      traefik:
        image: traefik:v2.0.1
        container_name: traefik
        restart: unless-stopped
        security_opt:
          - no-new-privileges:true
        networks:
          - external
        ports:
          - 80:80
          - 443:443
        volumes:
          - /etc/localtime:/etc/localtime:ro
          - /var/run/docker.sock:/var/run/docker.sock:ro
          - ./traefik.yml:/traefik.yml:ro
          - ./acme.json:/acme.json
        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.traefik.entrypoints=http"
          - "traefik.http.routers.traefik.rule=Host(`traefik.myhost.ddns.net`)"
          - "traefik.http.middlewares.traefik-auth.basicauth.users=*user:password*"
          - "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https"
          - "traefik.http.routers.traefik.middlewares=traefik-https-redirect"
          - "traefik.http.routers.traefik-secure.entrypoints=https"
          - "traefik.http.routers.traefik-secure.rule=Host(`traefik.myhost.ddns.net`)"
          # - "traefik.http.routers.traefik-secure.middlewares=traefik-auth"
          - "traefik.http.routers.traefik-secure.tls=true"
          - "traefik.http.routers.traefik-secure.tls.certresolver=http"
          - "traefik.http.routers.traefik-secure.service=api@internal"
          - "traefik.http.services.traefik.loadbalancer.server.port=8080"
    
    # 其他服务配置...
    
    networks:
      external:
        external: true
    
    1. traefik.yml内容:
    api:
      dashboard: true
    
    # 日志以JSON格式写入文件
    log:
      level: DEBUG
      filePath: "log-file.log"
      format: json
    
    # 配置100行缓存
    accessLog:
      filePath: "log-access.log"
      bufferingSize: 100  
    
    entryPoints:
      http:
        address: ":80"
      https:
        address: ":443"
    
    providers:
      docker:
        endpoint: "unix:///var/run/docker.sock"
        exposedByDefault: false
    
    certificatesResolvers:
      http:
        acme:
          email: my-email@hotmail.com
          storage: acme.json
          httpChallenge:
            entryPoint: http
    
  • 问题现象:
    执行docker-compose up -d后服务正常启动,访问traefik.myhost.ddns.net提示找不到站点,但将Host规则改为Host('traefik.localhost')后,访问traefik.localhost可正常打开仪表盘。

解决方案
  1. 排查DNS解析有效性
    切换到公网环境(比如关闭WiFi用手机流量),ping traefik.myhost.ddns.net,确认返回的IP和你的公网IP一致。如果解析错误,先检查No-Ip后台的A记录配置是否正确,同时确认DDNS更新客户端正常运行,避免运营商动态更换公网IP后记录没有同步更新。
  2. 排查端口连通性
    同样在公网环境下,测试公网IP的80、443端口是否可连通。国内多数家庭宽带的80、443端口会被运营商默认封锁,如果检测端口不通,可联系运营商申请解封,或者调整端口映射规则:将Traefik的80端口映射到主机非80端口(比如8080),443端口映射到8443,路由器转发规则同步修改,访问时带端口即可,示例:https://traefik.myhost.ddns.net:8443。
  3. 解决内网回环限制问题
    如果你是在内网环境下用DDNS域名访问,多数家用路由器默认不支持NAT回环,会导致无法访问。解决方案有两种:一是修改本地设备的hosts文件,将traefik.myhost.ddns.net指向运行Traefik服务的内网主机IP;二是在路由器后台配置DNS重写规则,将*.myhost.ddns.net的解析结果直接指向内网主机IP。
  4. 修正配置文件细节问题
    你提供的docker-compose.yml中basicauth配置行末尾缺失闭合双引号,先补全。另外acme.json文件权限必须设置为600,否则证书申请会失败,启动容器前先执行chmod 600 ./acme.json。
  5. 验证路由规则生效状态
    执行docker exec traefik traefik show config查看输出的路由规则,确认traefik.myhost.ddns.net已经正确绑定到对应的路由上,也可以查看Traefik的debug日志排查是否有其他报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 22:06:04