Docker启动报错:无法找到/app/main.py文件,寻求技术帮助
问题排查:Docker容器找不到main.py文件
错误原因
script_execution_service启动时找不到/app/main.py,核心问题出在卷挂载覆盖容器内文件:
- 你的
docker-compose.yml中给script_execution_service配置了挂载:- ./script_execution_service/app:/app,这条命令会把容器内的/app目录完全替换成本地的./script_execution_service/app目录。 - 虽然Docker构建时已经把本地
script_execution_service根目录下的main.py复制到了容器的/app里,但因为本地script_execution_service/app是空目录,挂载后容器内的/app就被清空了,导致main.py丢失。
解决方案(二选一)
方案1:移除不必要的卷挂载(推荐,适合生产或不需要本地代码同步的场景)
如果不需要实时同步本地app目录到容器,直接删除script_execution_service下的app挂载配置,同时添加数据库目录挂载(否则脚本访问不到数据库文件):
version: '3.8' services: data_storage_service: build: context: ./data_storage_service container_name: data_storage_service volumes: - ./data_storage_service/db:/db script_execution_service: build: context: ./script_execution_service container_name: script_execution_service depends_on: - data_storage_service # 移除原有的app目录挂载 # volumes: # - ./script_execution_service/app:/app environment: - DB_PATH=/db/initial-db.sqlite # 添加数据库目录挂载 volumes: - ./data_storage_service/db:/db
执行以下命令重新构建启动:
docker-compose down docker-compose up --build
方案2:调整文件结构与配置(适合开发调试,需要实时同步代码)
- 调整本地文件结构:把
main.py移动到script_execution_service/app目录下:
script_execution_service ├── app │ └── main.py ├── Dockerfile └── requirements.txt
- 修改Dockerfile:调整COPY命令,只复制
app目录到容器的/app:
FROM python:3.10 WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制本地app目录到容器的/app COPY app/ . CMD ["python", "main.py"]
- 修改docker-compose.yml:保留
app目录挂载,同时添加数据库目录挂载:
script_execution_service: build: context: ./script_execution_service container_name: script_execution_service depends_on: - data_storage_service volumes: - ./script_execution_service/app:/app - ./data_storage_service/db:/db environment: - DB_PATH=/db/initial-db.sqlite
执行docker-compose down && docker-compose up --build重新启动即可。
额外注意事项
当前initial-db.sqlite为空,脚本尝试查询ventes表会报错,后续需要先在数据库中创建对应表才能正常运行。
内容的提问来源于stack exchange,提问作者Spoofa
相关产品推荐
相关产品推荐

