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

通过GitLab容器注册表共享DRF API Docker镜像后,启动时出现manage.py文件不存在的错误

通过GitLab容器注册表共享DRF API Docker镜像后,启动时出现manage.py文件不存在的错误

嘿,这个问题我太熟了!你遇到的python: can't open file '/app/manage.py'错误,根源就在你的docker-compose.yml配置里。

问题分析

你给api服务加了这么一行卷挂载配置:

volumes:
  - ./app:/app

这行代码的作用是把你本地机器上的./app目录,直接覆盖容器镜像里已经存在的/app目录。

在你自己的机器上运行时没问题,是因为你的项目目录里本来就有app文件夹,挂载后容器能正常找到manage.py。但当你朋友(或者你自己在空的新目录)运行时,这个目录里根本没有app文件夹,容器里的/app就变成空的了,自然找不到文件。

解决方案

很简单,只需要修改docker-compose.yml,移除这个不必要的卷挂载:

  1. 编辑你的docker-compose.yml,删掉api服务下的- ./app:/app这一行,修改后的api服务配置大概是这样:
services:
  api:
    container_name: wishlist_api
    image: registry.gitlab.com/[你的项目路径]:latest
    ports:
      - "8080:8080"
    # 删掉下面这两行卷挂载配置
    # volumes:
    #   - ./app:/app
    command: >
      sh -c "python manage.py wait_for_db &&
      python manage.py makemigrations &&
      python manage.py migrate &&
      python manage.py runserver 0.0.0.0:8080"
    environment:
      - DB_HOST=db
      - DB_NAME=wishlistDB
      - DB_USER=postgres
      - DB_PASS=Testowe123!
      - DB_PORT=5432
    depends_on:
      - db
  1. 从你的Dockerfile来看,你已经用COPY ./app /app把代码复制进镜像了,所以只要把修改后的docker-compose.yml分享给朋友就行。如果不确定镜像内容是否正确,也可以重新构建并推送一次镜像:
docker build -t registry.gitlab.com/[你的项目路径]:latest .
docker push registry.gitlab.com/[你的项目路径]:latest
  1. 让你的朋友执行以下步骤:
    • 创建一个新目录,把修改后的docker-compose.yml放进去
    • 拉取镜像:docker pull registry.gitlab.com/[你的项目路径]:latest
    • 启动服务:docker-compose up

额外建议(本地开发用)

如果你平时本地开发需要挂载app目录(这样修改代码不用重新构建镜像),可以给这个卷挂载加个开关,比如用环境变量控制:

volumes:
  - ${DEV_MOUNT:-none}:/app

然后本地开发时,运行命令前先设置环境变量:

export DEV_MOUNT=./app
docker-compose up

分享给别人或者部署到VPS时,不用设置这个变量,容器就会使用镜像里的代码,不会出现文件缺失的问题。

备注:内容来源于stack exchange,提问作者KrysPy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 13:34:34