Docker-compose构建应用程序并复制dockerfile指定的未插入目录内容

时间:2019-05-18 09:19:52

标签: docker docker-compose dockerfile

我正在尝试将套接字服务和Django应用程序这两个服务容器化

我的文件结构是

\main file {docker-compose file} 
   \ django application {Dockerfile}
   \ socket app {Dockerfile}

当我运行docker build .时,它将生成图像 然后当我运行docker-compose build时, 我注意到,套接字应用程序和django应用程序被复制到了容器中,而不仅仅是Dockerfile指定的django应用程序。

我知道Dockerfile是在主目录而不是django目录中执行的吗?

这里是django应用程序应用程序内部的Dockerfile

# Pull base image
FROM python:3

# Set environment varibles
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# Set work directory
WORKDIR /code

# Install dependencies
COPY requirements.txt /code/
RUN pip install -r requirements.txt

# Copy project
COPY . /code/

RUN ls

这是docker-compose文件。 通过使用ls命令,我试图弄清楚发生了什么,输出的结果是复制了主文件夹中的应用程序,而不是django应用程序。

version: '3'
  services:
    db:
      image: postgres:10.1-alpine
      volumes:
        - postgres_data:/var/lib/postgresql/data/
    web:
      build: ./django_app
      command: ls /code/
      volumes:
        - .:/code
      ports:
        - 8000:8000
      depends_on:
        - db

  volumes:
    postgres_data:

这是预定用途还是我做错了什么?

1 个答案:

答案 0 :(得分:1)

volumes:文件中的docker-compose.yml指令实际上隐藏了Dockerfile所做的一切。您可以通过更改两个目录以匹配来解决您的紧迫问题:在volumes:伪指令中,绑定安装./django_app:/code

在一个更加面向生产的工作流程中,我建议使您的Docker映像完全独立:确保它具有运行您的应用程序的CMD,并且不要使用volumes:进行注入您的代码。从command:中删除volumes:docker-compose.yml,然后让图像提供自己的代码和默认命令。 (要进行开发,请使用Python虚拟环境进行本地代码隔离,并在使用Docker进行任何操作之前确保通过所有测试和基本的手动工作流程。)