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

使用docker-compose无法启动3个Python应用容器的问题排查请求

排查Docker Compose中Python应用容器启动失败问题

问题背景

执行命令docker-compose up -d --build --scale app=3创建5个容器(nginx、db、3个Python应用实例),目前nginx和db容器正常运行,但3个app.py实例容器无法启动。

相关配置与目录

Dockerfile

FROM python:3.9

WORKDIR /app

COPY . /app

RUN pip install -r requirements.txt

EXPOSE 80

CMD ["python", "app.py"]

requirements.txt

flask

docker-compose.yml

version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - 80:80
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - app

  app:
    build:
      context: ./app
    ports:
      - "8000"
    volumes:
      - ./app_logs:/app/logs

  db:
    image: mysql
    environment:
      - MYSQL_ROOT_PASSWORD=password
    volumes:
      - ./db/data:/var/lib/mysql
      - ./db/logs:/var/log/mysql
volumes:
  app_logs:
  db_data:
  db_logs:

nginx.conf

events {
    worker_connections 1000;
}

http {
    server {
        listen 80;

        location / {
            proxy_pass http://app:8000;
        }
    }
}

排查方向

  • 端口监听不匹配:Dockerfile声明暴露80端口,但compose配置中app服务映射的是8000端口,nginx反向代理也指向8000。需确认app.py中Flask服务的监听端口是否为8000(默认是5000),端口不一致会导致容器无法正常提供服务甚至启动失败。
  • 日志目录权限问题:compose中app服务挂载了./app_logs:/app/logs,若宿主机未创建app_logs目录,或容器内运行用户无该目录写入权限,会导致应用启动失败。可先移除该挂载项测试容器是否能启动,或手动创建目录并设置权限。
  • 依赖安装失败:执行docker-compose build app查看构建日志,确认pip是否成功安装flask。若构建过程中出现网络问题或requirements.txt路径错误,会导致容器无法正常启动。
  • 数据库连接配置缺失:若app.py需要连接db服务,需确认代码中是否使用db作为数据库主机名(compose服务名可自动解析),且是否处理了db启动延迟问题(比如添加重试逻辑)。执行docker-compose logs app查看容器启动时的具体报错信息。
  • 冗余卷定义不影响启动,但需注意挂载类型:compose的volumes部分定义了命名卷,但db和app服务实际使用的是绑定挂载,这部分冗余不会导致启动失败,但需确保绑定挂载的目录在宿主机存在。

内容的提问来源于stack exchange,提问作者Inbar Manor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 18:47:32