Docker Compose部署FlaskApp失败:容器未创建且Traefik未检测到
FlaskApp部署被拒绝(exit reject)及Traefik未检测服务的排查方案
使用以下Docker Compose配置部署FlaskApp时,出现部署被拒绝(exit reject)、容器无法创建,且Traefik未检测到该服务的问题。当前Traefik、Portainer及Portainer/agent服务均正常运行,各自对应独立域名。
用户提供的Docker Compose配置:
version: "3.7" services: flaskapp: image: rainergarcia/flaskapp:1.0 container_name: flaskapp volumes: - app_volume:./app_volume networks: - redmasiva deploy: mode: replicated replicas: 1 placement: constraints: [node.role == manager] labels: - "traefik.enable=true" - "traefik.docker.network=redmasiva" - "traefik.http.routers.flaskapp.rule=Host(`flaskapp.one.ooxen.com`)" - "traefik.http.routers.flaskapp.entrypoints=web" - "traefik.http.routers.flaskapp.priority=1" - "traefik.http.routers.flaskapp.tls.certresolver=letsencryptresolver" - "traefik.http.routers.flaskapp.service=flaskapp" - "traefik.http.services.flaskapp.loadbalancer.server.port=7000" networks: redmasiva: external: true attachable: true name: redmasiva volumes: app_volume: external: true name: app_volume
排查关键点:
- 卷挂载格式错误:volumes字段中
app_volume:./app_volume的写法不符合Docker Compose规范,命名卷挂载到容器路径的正确格式应为[卷名]:[容器内绝对路径],比如app_volume:/app。当前错误的格式会导致部署解析失败,触发exit reject。 - Swarm模式下禁止指定container_name:使用Swarm部署(配置中包含deploy字段)时,不能手动指定
container_name,Swarm集群会自动管理容器命名,手动指定会与Swarm的容器编排逻辑冲突,导致部署被拒绝。 - Traefik入口点与TLS配置冲突:配置中启用了TLS(
tls.certresolver)但指定了entrypoints=web,通常web入口点对应80端口(HTTP),而TLS需要使用443端口的websecure入口点,这会导致Traefik无法正确处理路由规则,同时可能影响服务的正常检测。 - 镜像拉取验证:在Swarm管理器节点执行
docker pull rainergarcia/flaskapp:1.0,确认镜像能正常拉取,若镜像不存在或拉取失败,会导致容器无法创建。 - Swarm节点状态检查:确认集群中存在符合
node.role == manager约束的节点,且该节点的磁盘、内存资源充足,节点状态正常(可通过docker node ls查看)。 - Traefik网络归属验证:确认Traefik容器已加入
redmasiva网络,只有在同一网络下,Traefik才能检测到FlaskApp服务的标签配置。
内容的提问来源于stack exchange,提问作者rainer garcia
相关产品推荐
相关产品推荐

