Docker Compose-找不到manage.py文件

时间:2019-09-01 10:58:21

标签: python docker docker-compose

我想用docker-compose创建2个Docker容器。 1个用于DB(Mongo),1个用于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启动时找不到我的文件?

3 个答案:

答案 0 :(得分:1)

Dockerfile和docker-compose中的目录结构似乎令人困惑。另一件事很奇怪,就是您可以在docker exec之后看到文件。

您将代码复制到Dockerfile中的COPY cleverInvestWeb/ /code/,然后在Docker-compose中将卷挂载到.:/code,以便一切都将覆盖/code位置上的现有映像。

我假设您的python文件位于本地目录cleverInvestWeb中,因此docker-compose boot up将覆盖现有的映像代码,并且您的文件更新位置将为code/cleverInvestWeb/manage.py/code/manage.py

要调试:

  • 删除docker-compose中的挂载并检查是否有效
  • command: tail -f /dev/null在docker-compose中设置此命令,并使用docker exec
  • 验证文件位置

答案 1 :(得分:0)

将命令更改为

from sqlalchemy.dialects.postgresql import JSONB

class Customer(Base):
    __tablename__ = 'customers'
    uuid = database.Column(database.String, primary_key=True)
    activity_type = database.Column(database.String)
    activity = database.Column(JSONB)

答案 2 :(得分:0)

这是 Django 初学者常见的错误

docker 文件'docker-compose.yml' 配置(在这个请求的开头显示)是正常的...除了调用 manage.py 文件时缺少 django 项目文件夹!

这条线应该是:


命令:python nameOfDjangoFolder/manage.py runserver 0.0.0.0:8000

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

/home/user/Documents/youDockerProjectFolder = (代码)

在“/home/user/Documents/youDockerProjectFolder”里面你应该找到django项目文件夹:yourDjangoProjectFolder/

在该文件夹中,您将找到 manage.py... 因此,必须使用 yourDjangoProjectFolder/manage.py 来调用 manage.py< /p>

更多但对这个解决方案不重要 在 Docker 项目文件夹中找到另一个重要文件 yourDjangoProjectFolder/youDjangoProjectFolder/settings.py