首页 > 解决方案 > 如何在主机上存储容器修改

问题描述

我想将所做的修改存储在 /home/data/dir1/ 下的容器中,所以我在我的 dockerfile 中添加了卷,如下所示。

FROM python:3.9.0
ARG WORK_DIR=/opt/dir1
RUN apt-get update && apt-get install cron -y && apt-get install -y default-jre
# Install python libraries
COPY requirements.txt /tmp/requirements.txt
RUN pip install --upgrade pip && pip install -r /tmp/requirements.txt
WORKDIR $WORK_DIR
EXPOSE 8888
# copy code on container under your workdir "/opt/dir1"
COPY . .
ENTRYPOINT ["sh", "-c"]
CMD ["jupyter-notebook --ip 0.0.0.0 --no-browser --allow-root"]    
VOLUME /home/data/dir1/

then in my terminal i did

 #build
 docker build -t my-python-app .
 #run
 docker run -it -p 8888:8888 my-python-app
 #in container i did
 jupyter notebook --ip 0.0.0.0 --no-browser --allow-root 

我认为我的 VOLUME 不起作用,因为当我在容器文件中进行修改时,主机 /home/data/dir1/ 中没有任何反应。

有谁知道为什么以及如何解决它?

标签: pythondocker

解决方案


如果您希望保留在容器运行时创建的数据,您可能应该使用某种volumesdocker 可以将数据保存到其中。

一个选项是绑定挂载 - 将依赖于 docker 主机的目录挂载到容器内的目录,以便在一侧(假设在容器中)所做的更改反映在另一侧(或在本例中为主机挂载)。如果您在主机绑定挂载中创建一个文件,您应该在容器中看到它,如果您使用 exec 进入它docker exec -it <container name or id> <command to run like bash \ sh, or with full path like /bin/sh>

SECOND OPTION是“常规” docker 卷,即使在使用此处docker <COMMAND>指定的 CLI 时,您也可以通过 docker 本身进行管理。

它比绑定挂载更通用,因为您可以主要使用任何您想要的存储实现,请参阅此处的用法和示例,我还添加了一个小片段以快速使用:

docker volume create my-volume
docker run -d -v my-volume:/home/data/dir1/ my-container-image:latest

此外,如果您需要移动到另一台主机,您可以像这样保存卷并将其提取到另一台主机中


推荐阅读