python - 如何在主机上存储容器修改
问题描述
我想将所做的修改存储在 /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/ 中没有任何反应。
有谁知道为什么以及如何解决它?
解决方案
如果您希望保留在容器运行时创建的数据,您可能应该使用某种volumes
docker 可以将数据保存到其中。
第一个选项是绑定挂载 - 将依赖于 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
此外,如果您需要移动到另一台主机,您可以像这样保存卷并将其提取到另一台主机中
推荐阅读
- wordpress - 仅将 WordPress 与 Next.js 一起用于某些路径
- android - 是否可以设计一个应用程序来告诉我我的孩子在他的设备上使用了多少时间。
- python - Django列表匹配查询不存在,但页面正确呈现,错误仅在终端显示
- python - 从列表中的滑动窗口中选择随机项目
- amazon-web-services - ALB 和 EC2 实例之间的 AWS 安全组
- go - Golang如何使用make创建指向切片指针的映射
- python-3.x - 如何使用 Tkinter 在 Python 中使用系统中的文件夹名称获取文件夹路径
- reactjs - 在jsx Reactjs的不同文件夹中从一个页面导航(路由)到另一个页面
- c++ - 函数数组元素总和
- java - Java Android 使用 ListAdapter 显示关注用户的帖子