当前位置: 首页 > article >正文

使用 Docker 容器持久化挂载本地路径避免数据丢失

使用 Docker 容器持久化挂载本地路径避免数据丢失

引言

不久前,我在进行数据分析时遇到了一个令人头疼的问题。由于工作需要,我频繁地在不同的环境中切换和测试代码。某天,在一次容器重建后,我突然发现所有的 Jupyter Notebook 环境配置和代码文件都不见了。把我给气死了、这不仅打断了我的工作流程,还让我意识到,必须找到一种方法来确保我的数据和环境不会因为容器的重建而丢失。
经过一番摸索和学习,我发现通过正确配置 Docker 的绑定挂载可以完美解决这个问题。今天,我想分享一下我的经验和心得,希望对同样遇到类似问题的朋友们有所帮助。


使用 Docker 容器持久化挂载本地路径避免数据丢失

1. 理解 Docker 数据持久化

Docker 容器默认情况下是无状态的,这意味着每次容器停止或重建时,容器内的数据都会丢失。为了防止这种情况发生,我们需要将容器内的数据持久化到宿主机上的一个目录中。这可以通过 Docker 的卷(Volumes)或绑定挂载(Bind Mounts)来实现。

2. 使用绑定挂载(Bind Mounts)

绑定挂载允许我们将宿主机上的一个目录直接挂载到容器内的指定路径。这样做的好处是可以直接访问宿主机上的文件系统,并且更容易管理数据。

步骤 1: 创建宿主机上的持久化目录

首先,在宿主机上创建一个用于持久化存储的目录:

mkdir -p /home/luke/jupyternotebook

步骤 2: 设置正确的权限

确保该目录及其内容具有适当的权限,以便容器内的用户可以读取和写入这些文件。假设容器内的 jovyan 用户的 UID 是 1000,GID 是 100

sudo chown -R 1000:100 /home/luke/jupyternotebook
sudo chmod -R 755 /home/luke/jupyternotebook```

步骤 3: 启动容器并挂载本地路径

使用 -v 参数将宿主机上的目录挂载到容器内。同时,使用 -e NB_UID 和 -e NB_GID 指定容器内的用户 ID 和组 ID,确保容器内的用户与宿主机上的用户匹配:

深色版本
docker run -d \
  --name datascience-notebook \
  -v /home/luke/jupyternotebook:/home/jovyan/work \
  -p 8888:8888 \
  -p 5000-5020:5000-5020/tcp \
  --restart=on-failure:3 \
  -e NB_UID=1000 \
  -e NB_GID=100 \
  -u 1000:100 \
  jupyter/datascience-notebook
  1. 验证数据持久化
    启动容器后,进入容器并验证挂载点的权限是否正确:
docker exec -it datascience-notebook /bin/bash
ls -la /home/jovyan/work

你应该看到类似如下的输出,确认所有者和组是 jovyan 或 1000:100,并且权限是可读写的:

深色版本
total 12
drwxr-xr-x 2 jovyan users 4096 Dec 17 08:42 .
drwsrws--- 1 jovyan users 4096 Dec 17 08:56 ..

http://www.kler.cn/a/441243.html

相关文章:

  • 安卓(android)读取手机通讯录【Android移动开发基础案例教程(第2版)黑马程序员】
  • OSCP:发送钓鱼电子邮件执行客户端攻击
  • 理解PLT表和GOT表
  • Python练习(2)
  • 电商系统-用户认证(三)基于公钥解析JWT令牌
  • Linux环境基础开发工具的使用(apt, vim, gcc, g++, gbd, make/Makefile)
  • GaLore和Q-GaLore:一种记忆高效的预训练和微调策略,用于大型语言模型(LLMs)
  • 推荐文章:探索单图像分片平面的3D重构——PlanarReconstruction项目详解
  • 【zlm】 webrtc源码讲解三(总结)
  • ctfshow-web入门-爆破(web21-web24)
  • 基于单片机智能鱼缸的设计
  • Windows 系统如何高效搭建 Linux 开发环境,一步步解锁内核源码
  • linux从frame buffer中将qt界面拷贝出来放到u盘的操作方法
  • wrk如何测试post请求
  • LabVIEW在国家项目中的应用与开发要求
  • 如何设计高效的商品系统并提升扩展性:从架构到实践的全方位探索
  • 【大数据】-- 读放大和写放大
  • 【$25000】利用Zendesk Nday获取漏洞赏金
  • 基于STM32设计的粮食仓库(粮仓)环境监测系统_284
  • Flutter:ListView实现一个可左右滑动的商品列表
  • 【Unity功能集】TextureShop纹理工坊(二)图层(上)
  • 单词谜(详解版)
  • python —— 常用命令行的命令
  • JS逆向--反调试(SoJson为例)
  • 从构想到实现:EasyOne 多模态 AI 产品开发历程
  • 集成自然语言理解服务,让应用 “听得懂人话”