我正在尝试将套接字服务和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:
这是预定用途还是我做错了什么?
答案 0 :(得分:1)
volumes:
文件中的docker-compose.yml
指令实际上隐藏了Dockerfile所做的一切。您可以通过更改两个目录以匹配来解决您的紧迫问题:在volumes:
伪指令中,绑定安装./django_app:/code
。
在一个更加面向生产的工作流程中,我建议使您的Docker映像完全独立:确保它具有运行您的应用程序的CMD
,并且不要使用volumes:
进行注入您的代码。从command:
中删除volumes:
和docker-compose.yml
,然后让图像提供自己的代码和默认命令。 (要进行开发,请使用Python虚拟环境进行本地代码隔离,并在使用Docker进行任何操作之前确保通过所有测试和基本的手动工作流程。)