Docker部署Scrapy/Flask应用报错:找不到/app/app.py文件求助
问题分析与解决
核心错误:docker-compose中web_server服务的build配置错误
你在docker-compose.yaml里给web_server服务的build字段写了./sreality_crawler/web_server:/app/sreality_crawler/web_server,这是volume映射的语法,不是build上下文的正确写法,导致Docker构建web_server镜像时上下文目录错误,无法正确复制项目文件到容器内,最终引发文件找不到的报错。
步骤1:修正docker-compose.yaml的web_server服务配置
将web_server的build字段改为项目根目录(和sreality_crawler服务一致),因为你的Dockerfile存放在项目根目录下:
version: '3' services: sreality_crawler: build: . volumes: - ./sreality_crawler:/app/sreality_crawler depends_on: - postgres environment: - DB_HOST=postgres - DB_PORT=5432 - DB_NAME=flats - DB_USER=postgres - DB_PASS=postgres command: ["scrapy", "crawl", "sreality"] postgres: image: postgres:latest environment: - POSTGRES_DB=flats - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres # 可选:如果需要本地连接PostgreSQL,添加端口映射 # ports: # - "5432:5432" web_server: build: . # 修正为项目根目录作为构建上下文 ports: - "8080:8080" depends_on: - sreality_crawler environment: # 添加数据库连接环境变量,Flask需要连接PostgreSQL的话 - DB_HOST=postgres - DB_PORT=5432 - DB_NAME=flats - DB_USER=postgres - DB_PASS=postgres
步骤2:验证Dockerfile的CMD路径正确性
你的Dockerfile中CMD ["python", "web_server/app.py"]是正确的,因为项目根目录下的web_server/app.py会被复制到容器的/app/web_server/app.py,工作目录是/app,所以这个命令会正确执行。
步骤3:重新构建并运行
执行以下命令清理旧镜像并重新启动服务:
docker-compose down --rmi local docker-compose up --build
额外检查点
- 确认你的Flask应用
app.py中监听的端口是8080(和Dockerfile的EXPOSE以及docker-compose的端口映射一致),比如app.py里要有:if __name__ == '__main__': app.run(host='0.0.0.0', port=8080) - 确保
requirements.txt包含了Flask和Scrapy所需的所有依赖,比如flask、scrapy、psycopg2-binary(如果用PostgreSQL)等。
内容的提问来源于stack exchange,提问作者Jaroslav H.
相关产品推荐
相关产品推荐

