未在 Docker 容器/映像内创建 venv 目录

Stu*_*er7 0 python docker dockerfile

我对 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
Run Code Online (Sandbox Code Playgroud)

图像似乎构建得很好,但是当我去运行容器时:

docker container run -v /home/me/dev/djangoRESTreact/code:/code -it --rm djangodev /bin/bash
Run Code Online (Sandbox Code Playgroud)

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

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

我正在拔头发。

提前致谢!

AKX*_*AKX 5

Docker 容器中根本不需要 venv,因此不必费心。

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
Run Code Online (Sandbox Code Playgroud)

不过,要回答你的问题,你误解了-v坐骑的工作原理;他们将主机上的东西安装到容器中的目录上。在 dockerfile 中创建的内容/code/...基本上被卷挂载覆盖,这就是为什么您根本看不到 venv。