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

如何在AWS EC2的Bitnami Jenkins流水线中通过子域名暴露Docker容器应用

我来帮你搞定用Traefik通过子域名访问Docker容器内应用的问题,结合你在EC2上跑Bitnami Jenkins+Docker流水线的场景,一步步来:

核心配置思路

Traefik作为反向代理,核心是通过Docker标签识别容器、配置路由规则,再配合域名解析和EC2安全组设置,就能实现子域名直接访问容器内的应用。你已经能看到同网络的容器,说明Traefik和Docker的连接没问题,接下来重点搞定路由、解析和安全配置。

1. 先确认Traefik的基础配置(用Docker Compose更稳定)

如果还没固定Traefik的配置,建议用下面的docker-compose.yml来部署,确保它和你的Jenkins流水线容器在同一个网络:

version: '3.8'

services:
  traefik:
    image: traefik:v2.10
    command:
      - "--api.insecure=true" # 测试阶段打开方便看仪表盘,生产一定要关
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false" # 只代理加了标签的容器,避免乱代理
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080" # Traefik仪表盘端口,访问EC2公网IP:8080就能看
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro" # 只读挂载Docker套接字,安全
    networks:
      - jenkins-pipeline-network # 替换成你实际用的Docker网络

networks:
  jenkins-pipeline-network:
    external: true # 假设你已经创建了这个网络

启动Traefik:docker-compose up -d

2. 给流水线中的容器加Traefik路由标签

重点是你的Tomcat容器(跑war应用),在Jenkins流水线里启动容器时,加上Traefik的标签规则,指定子域名。

方式1:用Docker命令启动Tomcat

docker run -d \
  --name tomcat-myapp \
  --network jenkins-pipeline-network \
  -l "traefik.enable=true" \
  -l "traefik.http.routers.tomcat-myapp.rule=Host(`app.yourdomain.com`)" \
  -l "traefik.http.routers.tomcat-myapp.entrypoints=web" \
  -l "traefik.http.services.tomcat-myapp.loadbalancer.server.port=8080" \
  your-custom-tomcat-image # 替换成你包含war包的Tomcat镜像

方式2:用Docker Compose在流水线中部署

如果你的流水线用docker-compose部署应用,就在配置里加labels:

services:
  tomcat-myapp:
    image: your-custom-tomcat-image
    networks:
      - jenkins-pipeline-network
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.tomcat-myapp.rule=Host(`app.yourdomain.com`)"
      - "traefik.http.routers.tomcat-myapp.entrypoints=web"
      - "traefik.http.services.tomcat-myapp.loadbalancer.server.port=8080"

标签说明:

  • traefik.enable=true:告诉Traefik要代理这个容器
  • Host(app.yourdomain.com):指定子域名,访问这个域名时自动路由到该容器
  • loadbalancer.server.port=8080:对应Tomcat容器内暴露的端口,别写错

3. 域名解析到EC2公网IP

去你的域名服务商后台(比如AWS Route53、阿里云等),添加一条A记录:

  • 主机记录:app(对应子域名app.yourdomain.com)
  • 记录值:你的EC2实例公网IP(建议用弹性IP,避免重启EC2后IP变化)

4. 开放EC2安全组端口

登录AWS控制台,找到你的EC2实例的安全组,添加入站规则:

  • 类型:HTTP(80)、HTTPS(443)
  • 来源:测试阶段可以设为0.0.0.0/0,生产环境建议限制特定IP段

5. 测试验证

  1. 访问Traefik仪表盘:http://你的EC2公网IP:8080,查看Routers和Services列表,确认tomcat-myapp已经被注册
  2. 访问子域名:http://app.yourdomain.com,应该能看到你的Tomcat应用了

常见问题排查

  • 访问子域名没反应:先用nslookup app.yourdomain.com检查域名解析是否指向EC2 IP;再检查安全组是否开放80端口;最后看Traefik仪表盘里有没有对应的路由
  • 出现404:检查Traefik标签里的Host规则域名是否和访问的一致,还有容器端口是否正确(比如Tomcat是不是改了端口)
  • 容器不被Traefik识别:确认容器和Traefik在同一个Docker网络,用docker network inspect jenkins-pipeline-network查看容器列表

内容的提问来源于stack exchange,提问作者Hugo L.M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:41:30