Docker包含多个Dockfiles和图像(Django + Angular)

时间:2017-09-13 15:31:32

标签: django docker

我正在构建一个使用Django和Angular的应用程序,它分为两个不同的存储库和docker镜像。

我的文件结构是:

.
docker-compose.yml
djangoapp/
    Dockerfile
    manage.py
    ...
angularapp/
    Dockerfile
    ...

我无法让它正常工作,我在此找到的所有文档似乎都希望您将docker-compose.yml文件与DockerFile一起使用。

我尝试了多种不同的版本,但我当前(不工作的)docker-compose.yml文件看起来像这样:

version : '3'
services:
  web:
    build: ./djangoapp
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "8000:8000"

这给了我错误can't open file 'manage.py': [Errno 2] No such file or directory

如果我进入djangoapp/目录并根据官方Docker文档创建docker-compose.yml文件,它可以正常工作。所以实际构建没有问题,问题是从外部访问它,就像我想要的那样。

更新:我还决定添加位于./djangoapp/Dockerfile的Dockerfile。

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

2 个答案:

答案 0 :(得分:0)

从我看来,它似乎只是一个简单的错字

version : '3'
services:
  web:
    build: ./djangoapp
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - "8000:8000"

那个./是你想念的全部。我很确定没有它,docker compose文件就不会进入指定的目录。

<强>更新 现在我看到了你的Dockerfile,我注意到你没有将manage.py添加到你的容器中。与添加requirements.txt的方式相同,您需要使用manage.py。构建Docker容器时,它只包含您提供的内容以及它从基本Image中获得的任何其他文件结构。

您可以将其添加到Dockerfile中,也可以在本地目录和容器目录之间创建共享卷。我认为在Dockerfile中添加它会是最简单的。

答案 1 :(得分:0)

使用docker-compose build web命令重建我的Docker镜像可以解决此问题。似乎在我遇到错误的阶段,该构建不包括所需的文件。所以在我在问题帖子中显示的代码中,没有任何错误,只需要重建。