如何在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. 测试验证
- 访问Traefik仪表盘:
http://你的EC2公网IP:8080,查看Routers和Services列表,确认tomcat-myapp已经被注册 - 访问子域名:
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
相关产品推荐
相关产品推荐

