如何在主机上存储修改后的容器



我想在/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/没有任何变化。

有人知道为什么和如何解决它吗?

如果您希望在容器运行时保存创建的数据,您可能应该使用某种volumesdocker来保存数据

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

对它执行命令第二种选择是"regular"您可以通过docker本身管理的docker卷,即使在使用这里指定的docker <COMMAND>CLI时也是如此。

它的版本性比绑定挂载要好得多,因为你可以使用任何你想要的存储实现,参见这里的用法和示例,我还添加了一个小片段来快速使用:

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

如果你需要移动到另一个主机,你可以保存卷并在另一个主机上提取它,像这样

最新更新