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

单IP多域名对应不同Docker容器的最简实现方案咨询

最简解决方案:用反向代理实现域名路由到不同Docker容器

嗨,这个问题我太熟了!你之前用的那个com.docker.ucp.mesh.http标签是针对Docker企业版UCP集群的,单节点服务器这么用肯定会踩坑——一来你把多个容器都绑定到主机的80端口,后面的容器根本启动不了(端口冲突);二来那个标签没做域名的精准区分,自然所有域名请求都被导向第一个启动的容器了。

下面给你两个最简方案,按上手难度排序:

方案一:Nginx Proxy Manager(最省心,图形化操作)

这是新手友好度拉满的工具,不用写复杂配置,点点鼠标就能搞定域名路由,还能自动申请HTTPS证书。

步骤:

  1. 创建专属Docker网络(让反向代理和你的业务容器能互相访问):
    docker network create proxy-network
    
  2. 启动Nginx Proxy Manager容器:
    docker run -d \
      --name nginx-proxy-manager \
      --restart=always \
      -p 80:80 \
      -p 81:81 \
      -p 443:443 \
      -v ./nginx-proxy-manager/data:/data \
      -v ./nginx-proxy-manager/letsencrypt:/etc/letsencrypt \
      --network proxy-network \
      jc21/nginx-proxy-manager:latest
    
  3. 配置域名路由:
    • 访问服务器IP的81端口(比如http://你的服务器IP:81),默认账号是admin@example.com,密码changeme,登录后记得改密码。
    • 点击左侧Hosts -> Proxy Hosts -> Add Proxy Host:
      • Domain Names:填你的第一个域名,比如my1.example.com
      • Forward Hostname/IP:填你第一个业务容器的名称(比如container_1)或者容器内部IP
      • Forward Port:填容器的内部端口(比如8080)
      • 要HTTPS的话,直接在SSL标签页选Request a new SSL certificate,勾选Force SSL和HTTP/2 Support,自动生成Let's Encrypt证书。
    • 重复上面的操作,给剩下四个域名分别配置对应的容器和端口。
  4. 启动你的业务容器:
    不用再绑定主机的80端口了,只要加入同一个proxy-network,命名好容器就行:
    docker run -d \
      --name container_1 \
      --restart=always \
      --network proxy-network \
      你的镜像名:版本
    
    剩下四个容器同理,只需要改--name和镜像名。

方案二:Traefik(自动发现,适合命令行爱好者)

Traefik是轻量级的云原生反向代理,能自动识别Docker容器的路由标签,不用手动配置反向代理规则。

步骤:

  1. 创建专属Docker网络:
    docker network create traefik-network
    
  2. 创建Traefik的配置文件traefik.yml(放在服务器某个目录下,比如./traefik):
    api:
      dashboard: true
    entryPoints:
      web:
        address: ":80"
      websecure:
        address: ":443"
    providers:
      docker:
        endpoint: "unix:///var/run/docker.sock"
        exposedByDefault: false
    certificatesResolvers:
      letsencrypt:
        acme:
          email: "你的邮箱@example.com"
          storage: acme.json
          httpChallenge:
            entryPoint: web
    
  3. 启动Traefik容器:
    docker run -d \
      --name traefik \
      --restart=always \
      -p 80:80 \
      -p 443:443 \
      -p 8080:8080 \
      -v ./traefik/traefik.yml:/etc/traefik/traefik.yml \
      -v ./traefik/acme.json:/acme.json \
      -v /var/run/docker.sock:/var/run/docker.sock \
      --network traefik-network \
      traefik:latest
    
    访问http://你的服务器IP:8080就能看到Traefik的仪表盘。
  4. 启动带路由标签的业务容器:
    每个容器启动时添加Traefik的标签,指定对应的域名和端口:
    docker run -d \
      --name container_1 \
      --restart=always \
      --network traefik-network \
      --label "traefik.enable=true" \
      --label "traefik.http.routers.container1.rule=Host(`my1.example.com`)" \
      --label "traefik.http.routers.container1.entrypoints=web,websecure" \
      --label "traefik.http.routers.container1.tls.certresolver=letsencrypt" \
      --label "traefik.http.services.container1.loadbalancer.server.port=8080" \
      你的镜像名:版本
    
    剩下四个容器只需要改--name、标签里的container1和域名my1.example.com、端口即可。

关键注意点

  • 所有容器必须和反向代理(Nginx Proxy Manager/Traefik)在同一个Docker网络里,这样才能互相访问。
  • 确保你的五个域名都正确解析到服务器的公网IP。
  • 不要给业务容器绑定主机的80/443端口,把端口控制权交给反向代理。

内容的提问来源于stack exchange,提问作者Bartłomiej Bartnicki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:29:13