我是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/