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

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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 21:33:11