我是Docker的新手,作为实验,我试图使用以下Dockerfile创建一个通用的Django开发容器:

FROM python

ENV PYTHONUNBUFFERED 1
RUN apt-get update && apt-get dist-upgrade -y
RUN mkdir /code
WORKDIR /code
RUN python3 -m venv djangoProject
RUN /bin/bash -c "source /code/djangoProject/bin/activate && python3 -m pip install --upgrade pip && pip install django"
EXPOSE 8000

该图像似乎可以建立,但是当我去运行容器时:
docker container run -v /home/me/dev/djangoRESTreact/code:/code -it --rm djangodev /bin/bash

我的本地挂载/ home / me / dev / djangoRESTreact / code未填充我从该Dockerfile和挂载中期望的djangoProject venv目录。 docker容器在/ code处还有一个空目录。如果直接在容器内运行python3 -m venv djangoProject,则会创建venv目录,并且可以在主机上和容器内看到它。

知道为什么未在镜像和后续容器中创建我的venv吗?

我正在拔头发。

提前致谢!

最佳答案

您根本不需要在Docker容器中使用venvs,因此不必打扰。

FROM python
ENV PYTHONUNBUFFERED 1
RUN apt-get update && apt-get dist-upgrade -y
RUN mkdir /code
WORKDIR /code
RUN python3 -m pip install --upgrade pip
RUN python3 -m pip install django
EXPOSE 8000

但是,要回答您的问题,您会误解-v挂载的工作方式。他们将您主机上的东西挂载到容器中的目录中。在dockerfile中创建的/code/...本质上被卷装载覆盖,这就是为什么您根本看不到venv的原因。

关于python - 在Docker容器/镜像中未创建venv目录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60215951/

10-16 23:53