Docker Compose - 找不到 manage.py 文件。

6

我想用docker-compose创建两个Docker容器,一个用于数据库(Mongo),另一个用于Web(Django)。

以下是我的文件:

docker-compose.yml

version: '3'
services:
  db:
    image: mongo
    command: mongod
  web:
    build: code/
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

代码/Dockerfile

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY cleverInvestWeb/ /code/

在目录code/cleverInvestWeb/中,有我的Django的manage.py文件。
当我运行docker-compose up时,它抛出以下错误:
web_1  | python: can't open file 'manage.py': [Errno 2] No such file or directory

当我通过Docker本身启动容器时,使用docker exec -it dockerdiplom_web bash并在那里执行ls命令,它会显示manage.py文件。
你有没有想法为什么docker-compose在启动时找不到我的文件?

2
如果删除 volumes:,它是否能正常工作? 如果您使用和不使用该声明运行 docker-compose run web sh,您会在正在运行的容器内看到什么? - David Maze
4个回答

8
您的Dockerfile和docker-compose中的目录结构似乎有些混淆。另一个奇怪的问题是,您可以在docker exec之后看到文件。
在Dockerfile中将代码复制到COPY cleverInvestWeb/ /code/,然后在Docker-compose中将卷挂载到.:/code,因此一切都会覆盖现有镜像上/code位置的内容。
我假设您的Python文件位于本地目录cleverInvestWeb中,因此当docker-compose启动时,它将覆盖现有镜像代码,并且您的文件更新位置将为code/cleverInvestWeb/manage.py/code/manage.py 为了调试:
  • 去掉docker-compose中的挂载并检查是否有效
  • command: tail -f /dev/null 将此命令设置在docker-compose中,并使用docker exec验证您的文件位置

2
@David Maze的评论和你的回答都很有帮助。我在docker-compose.yml文件中删除了volumes部分,并使用python /code/manage.py runserver 0.0.0.0:8000修正了command。谢谢你们,现在它可以工作了! :D - Virtual

2

这是Django初学者常见的错误

'docker-compose.yml'配置文件(在此请求开头显示)已经没问题了...除了调用manage.py文件时缺少Django项目文件夹!

正确的命令应该是:

command: python nameOfDjangoFolder/manage.py runserver 0.0.0.0:8000

关于名为“/code”的卷的解释 卷“/code”正在使用Docker项目文件夹的根目录构建您的应用程序:

/home/user/Documents/youDockerProjectFolder = (Code)

在“/home/user/Documents/youDockerProjectFolder”中,您应该找到Django项目文件夹:yourDjangoProjectFolder/

在那个文件夹里,你会找到manage.py...所以使用yourDjangoProjectFolder/manage.py来调用manage.py是很正常的。

更多内容,但对于这个解决方案并不重要。 在Docker项目文件夹中,还可以找到另一个重要的文件 yourDjangoProjectFolder/youDjangoProjectFolder/settings.py


1

将你的命令更改为

command: python code/manage.py runserver 0.0.0.0:8000

web_1 | Python:无法打开文件'code/manage.py':[Errno 2] 没有那个文件或目录 - Virtual

0
我在使用Dockerfile从Github仓库部署到Digital Ocean时遇到了这个问题。在我的情况下,我不小心将manage.py添加到了.gitignore文件中。因此,我的Github仓库从来没有manage.py文件。
你应该确保manage.py文件实际上存在于它预期的目录中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接