【问题标题】:Docker-compose tutorial not working "python: can't open file 'manage.py"Docker-compose 教程不起作用“python:无法打开文件'manage.py”
【发布时间】:2016-10-18 17:26:56
【问题描述】:

我正在运行here 所示的简单 Docker-compose 示例

这里是 Dockerfile:

 FROM python:2.7
 ENV PYTHONUNBUFFERED 1
 RUN mkdir /code
 WORKDIR /code
 ADD requirements.txt /code/
 RUN pip install -r requirements.txt
 ADD . /code/

这里是 docker-compose.yml:

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

当我尝试使用 docker-compose 启动示例时,它给了我以下信息:

alex@universe:~/projects/testcompose$ docker-compose up
testcompose_db_1 is up-to-date
Recreating testcompose_web_1
Attaching to testcompose_db_1, testcompose_web_1
web_1  | python: can't open file 'manage.py': [Errno 2] No such file or directory
db_1   | The files belonging to this da...

可能教程不是最新的,所以如果你知道答案,请写在这里。

【问题讨论】:

  • 您是否运行过此命令:docker-compose run web django-admin.py startproject composeexample .docker-compose.yml 的文件夹内?它实际上会在 Docker Volume 中创建 manage.py 和所有与 Django 相关的文件。
  • 是的,我做到了。实际上问题是运行这个命令后项目结构不正确。它创建了额外的 composeexample 文件夹,其中包含项目和 manage.py 文件。将所有文件向上移动一层后,一切都按预期工作。

标签: django docker-compose


【解决方案1】:

正确,项目文件结构已正确生成。 Django 总是有一个my-project-folder/my-site/my-site 文件结构。

要使其与 docker-compose 一起使用,您只需将以下文件上移至 my-project-folder/my-site/

Dockerfile
docker-compose.yml
requirements.txt

my-project-folder/my-site/ 已经包含 manage.py 文件(如果不是这种情况,则有问题)

此时确保my-project-folder/ 仅包含 my-site/ 文件夹,仅此而已。

一旦一切设置正确,只需向上移动到my-project-folder/my-site/my-site 执行命令docker-compose up 它将构建所需的一切。 再次执行命令docker-compose up 就可以了。

如果需要,不要忘记检查允许的主机并在settings.py 文件中添加“0.0.0.0”。

就是这样。

【讨论】:

    【解决方案2】:

    如果您使用的是 docker-machine 或 Docker Toolbox,这可能是因为项目不在 /Users 目录下。只有该目录可用作 VM 中的共享文件夹。

    您可以从配置中删除volumes:,或将另一个共享文件夹添加到 Virtualbox。

    【讨论】:

    • @dhephin 感谢您的回答!我没有在 Ubuntu 上使用 docker-machine。问题是在容器内启动 Django 项目后项目结构不正确。
    【解决方案3】:

    我带着同样的错误信息来到这里,结果我只是忘记在以下命令的末尾添加点 .

    docker-compose run web django-admin.py startproject composeexample .

    【讨论】:

      【解决方案4】:

      我在学习这个 docker 基础教程https://docs.docker.com/compose/django/时也遇到了同样的问题

      所以,基本上我在同一个阶段,我也是 docker 的菜鸟。我的方法是首先我使用以下命令来识别图像目录中的内容,确保您的 django 项目在该目录中可用

      docker run -it container_name sh
      

      之后你会在运行 docker-compose up 命令时收到此错误

      web_1 | python:无法打开文件'/proto/manage.py':[Errno 2] 否 这样的文件或目录

      所以,基本上 docker 正在执行来自您的 Dockerfile 的指令,它正在执行您的代码文件夹中的 python manage.py runserver 命令,该文件夹不包含您的 manage.py 文件。

      所以,添加这一行,它将导航到包含 manage.py 文件的文件夹

      CMD . /code/composeexample/
      

      现在再次构建您的项目

      docker-compose build
      

      现在运行下面的命令,一切顺利

      docker-compose up
      

      【讨论】:

      • 我应该在哪里添加CMD . /code/composeexample/
      【解决方案5】:

      我使用的是创建 virtualenv 的 pipenv, 我的问题是我忘记使用了

      RUN pipenv shell
      

      启用 virtualenv。

      但是在容器中使用pipenv shell 会产生一些问题 所以解决方案是使用--system 选项和pipenv install 命令

      RUN pipenv install --system
      

      这会导致软件包安装在容器本身而不是容器中的 virtualenv 上。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-16
        • 2018-07-07
        • 2021-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-04
        相关资源
        最近更新 更多