一、核心原理

Docker 容器的运行时配置(包括挂载)是启动时确定的,一旦启动无法直接修改。因此,需通过以下步骤实现:

  1. 保存原容器中的数据(避免丢失);

  2. 基于原镜像创建新容器,同时添加新的挂载配置,并复用原容器的数据;

  3. 验证新容器正常运行后,替换原容器。

二、详细操作步骤

步骤 1:确认原容器的数据存储位置

首先需要明确原容器中数据的存储路径(避免遗漏数据),可通过以下命令查看容器详情:

docker inspect 原容器名称/ID | grep -A 20 "Mounts"  # 查看现有挂载(如有)docker inspect 原容器名称/ID | grep "WorkingDir"    # 查看工作目录(可能存储数据)
  • 如果原容器已使用命名卷(Named Volume):数据会保存在卷中,直接复用该卷即可(无需复制数据)。

  • 如果原容器使用匿名卷无挂载:数据存储在容器的 “可写层”(容器内部路径),需先将数据复制到主机或卷中。

步骤 2:备份 / 迁移原容器数据

根据数据存储位置,选择以下方式迁移数据:

情况 A:原容器数据在 “可写层”(无挂载 / 匿名卷)

需将容器内的数据复制到主机的临时目录(后续用于新容器挂载):

# 示例:将原容器内的 /app/data 目录复制到主机的 /host/old_data 目录docker cp 原容器名称/ID:/app/data /host/old_data
情况 B:原容器使用命名卷(如卷名为 my_volume

无需复制数据,直接记录卷名即可(新容器挂载该卷时会自动复用数据)。 查看卷名的命令:

docker volume ls  # 列出所有卷,找到原容器关联的卷(可通过 docker inspect 确认)
步骤 3:记录原容器的启动参数

新容器需要复用原容器的核心配置(如端口映射、环境变量、网络等),否则可能无法正常运行。 通过以下命令提取原容器的启动参数:

docker inspect 原容器名称/ID | grep -A 30 "Args"       # 查看启动命令参数docker inspect 原容器名称/ID | grep -A 10 "Env"        # 查看环境变量docker inspect 原容器名称/ID | grep -A 10 "Ports"      # 查看端口映射docker inspect 原容器名称/ID | grep -A 5 "NetworkMode" # 查看网络模式

记录关键参数(如 -p 8080:80-e "KEY=VALUE"--network my_net 等)。

步骤 4:停止原容器

为避免数据冲突,先停止原容器:

docker stop 原容器名称/ID
步骤 5:创建新容器(添加新挂载 + 复用原数据)

基于原镜像创建新容器,同时:

  • 挂载原数据(通过步骤 2 的备份目录或原卷);

  • 添加新的文件映射(-v 主机路径:容器路径);

  • 复用步骤 3 记录的原容器参数(端口、环境变量等)。

示例命令(根据实际情况修改):

假设:

  • 原镜像为 my_image:latest

  • 原数据已复制到主机 /host/old_data(对应容器内 /app/data);

  • 新增映射:主机 /host/new_config 映射到容器 /app/config

  • 原容器端口映射为 -p 8080:80,环境变量为 -e "MODE=prod"

则新容器启动命令:

docker run -d \--name 新容器名称 \-p 8080:80 \                  # 复用原端口映射-e "MODE=prod" \              # 复用原环境变量-v /host/old_data:/app/data \ # 挂载原数据(确保数据不丢)-v /host/new_config:/app/config \ # 新增的文件映射my_image:latest                # 原镜像
  • 如果原容器使用命名卷(如 my_volume),则替换 -v /host/old_data:/app/data-v my_volume:/app/data 即可。

步骤 6:验证新容器
  1. 检查新容器是否正常启动:

    docker ps | grep 新容器名称  # 确认状态为 Up
  2. 验证原数据是否存在:

    docker exec 新容器名称 ls /app/data  # 查看原数据是否存在
  3. 验证新挂载是否生效:

    # 在主机新建测试文件,检查容器内是否同步touch /host/new_config/test.txtdocker exec 新容器名称 ls /app/config  # 应能看到 test.txt
步骤 7:替换原容器(可选)

如果新容器运行正常,可删除原容器(释放资源),并将新容器重命名为原容器名称(避免影响外部依赖):

docker rm -f 原容器名称          # 删除原容器docker rename 新容器名称 原容器名称  # 重命名新容器

三、注意事项

  1. 数据一致性:迁移数据前建议停止原容器,避免复制过程中数据被修改。

  2. 配置复用:务必复制原容器的所有关键参数(端口、环境变量、网络等),否则新容器可能无法正常提供服务。

  3. 卷的优势:推荐使用命名卷(而非绑定挂载)管理数据,后续修改挂载时无需手动复制数据,直接复用卷即可。

通过以上步骤,即可在不丢失数据的情况下,为容器添加新的文件映射配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90149.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90149.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/90149.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MVCC(多版本并发控制)介绍及实现原理

一、什么是MVCC? MVCC(Multi-Version Concurrency Control,多版本并发控制)是数据库中用于解决并发访问问题的一种机制。它通过为数据维护多个版本,让读写操作在不同版本上独立进行,从而避免了传统锁机制中…

密码学基础概念详解:从古典加密到现代密码体系

一、引言:为什么我们需要密码学? 在数字化时代,信息已成为核心生产要素,而信息安全则是保障社会运转的基石。当我们在电商平台输入银行卡密码时,当我们通过即时通讯工具发送私密消息时,当企业在云端存储核心…

小鹏汽车视觉算法面试30问全景精解

小鹏汽车视觉算法面试30问全景精解 ——智能驾驶 车路协同 视觉创新:小鹏汽车视觉算法面试核心考点全览 前言 小鹏汽车作为中国智能电动汽车的创新引领者,致力于通过AI与自动驾驶技术推动智能出行的变革。小鹏视觉算法团队深耕自动驾驶感知、车路协同、智能座舱、3D重建…

程序是如何生成的-以c语言为例

一,序言 从代码到能跑的程序,整个过程就像 “把外文翻译成母语,再组装成能直接用的东西”,一步步来更清楚: 源代码(程序员写的代码,如C语言文件)↓ 预处理(处理#开头的命…

风险识别清单:构建动态化的风险管理体系

在项目管理实践中,风险识别是确保项目成功的关键环节。PMBOK提出的风险提示清单(Prompt List)为项目团队提供了一个系统化的思考框架,帮助突破个人经验局限,实现更全面的风险覆盖。这一工具的价值不仅在于其提供的标准…

从“点状用例”到“质量生态”:现代软件测试的演进、困局与破局

测试的三次范式跃迁业务高速迭代下的四大困局质量工程化:流程、平台、度量三位一体左移与右移:把缺陷扼杀在摇篮,也把监控铺到坟墓自动化金字塔的再平衡:UI、API、单元、契约、e2e数据驱动测试:从“拍脑袋”到“科学实…

【C++】继承和多态扩展学习

目录 1. 菱形虚拟继承原理剖析 1.1.虚基表 2. 单继承和多继承的虚函数表深入探索 2.1 单继承虚函数表深入探索 2.2 多继承虚函数表深入探索 ​编辑 2.3 菱形继承、菱形虚拟继承 3. 继承和多态考察的一些常见问题 1. 菱形虚拟继承原理剖析 继承的文章中我们讲到C的多继承…

Visual Studio Code 远端云服务器开发使用指南

目录 一、下载安装 1、官方下载 2、下载加速方案 二、基于Ubuntu系统的开发环境搭建方案 1、开发环境配置 2、云服务器架构 3、工作流程关系 4、总结 三、推荐插件 1、免配置插件 1. Remote-SSH - 远程登录Linux服务器 2. C/C - 必备的C/C开发插件 3. C/C Extensi…

技术演进中的开发沉思-41 MFC系列:定制 AppWizard

MFC开发,最为重要的无非就是用“MFC AppWizard” 对话框做开发了,第一次使用感觉像拆收音机的孩子 —— 左边是项目类型选择,右边是一堆打勾的选项,点完 “完成”,屏幕上就冒出了能直接编译运行的窗口程序。那时还不知…

Libevent(3)之使用教程(2)创建事件

Libevent(3)之使用教程(2)创建事件 Author: Once Day Date: 2025年6月29日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 本文档翻译于:Fast portable non-bl…

Kotlin 作用域函数 let 的实现原理

Kotlin 中的 let 是一个 标准库扩展函数,它广泛用于作用域函数(Scope Functions)中,尤其适用于对可空对象(nullable)做非空判断并执行代码块的场景。 示例代码 val name: String? "123" name?…

从FDTD仿真到光学神经网络:机器学习在光子器件设计中的前沿应用工坊

FDTD仿真与光学神经网络的基础概念 FDTD(时域有限差分)是一种数值方法,用于求解麦克斯韦方程组,广泛应用于光子器件设计。光学神经网络通过光波导、衍射元件等物理结构实现矩阵运算,具有低能耗、高并行的优势。 机器学…

在Ubutu22系统上面离线安装Go语言环境【教程】

0.引言 Go语言(又称Golang)是Google开发的一种静态强类型、编译型、并发型编程语言,由Robert Griesemer、Rob Pike和Ken Thompson于2007年开始设计,2009年正式发布。 1.到官网下载压缩包 2.从win10系统离线上传压缩包给ubuntu22…

CMake实践:CMake3.30版本之前和之后链接boost的方式差异

目录 1.背景 2.boost引入CMake时机 3.CMake 3.30 之前(含 3.29)链接 Boost 的方式 4.CMake 3.30 及之后链接 Boost 的方式 5.CMake3.30后引入Boost的步骤 6.迁移建议(3.30 之前 → 3.30 之后) 7.CMake 3.30 移除FindBoost的…

告别挂马风险!PBootCMS完美替代方案BadouCMS

开发企业网站时一直比较喜欢用pbootcms,标签套用很简单,使用也方便。 但是pbootcms一直有被挂马的问题,官方好像也不怎么更新了!换过好几个cms,比如eyoucms、dedecms、帝国等等,感觉都不怎么能用得习惯,还…

开发者如何集成AI绘画?智创聚合API简化Midjourney接入

在 AI 绘画领域,Midjourney 的大名如雷贯耳,其强大的图像生成能力,能将我们脑海中的奇思妙想,迅速转化为精美的视觉画面,深受设计师、艺术家以及广大创意爱好者的青睐。然而,使用 Midjourney 的过程中&…

pycharm回车、删除、方向键和快捷键等不能使用原因

解决方法 :菜单栏中的Tools取消勾选Vim Emulator 原因 :新版的pycharm安装中,默认安装了vim扩展,一旦安装了pycharm在编写代码时会默认使用Vim编辑器

修复ffmpeg.dll丢失错误|6种解决ffmpeg.dll方法详细教程

看到电脑提示“ffmpeg.dll丢失”,很多人会懵。ffmpeg.dll 是个处理视频、音频的关键文件。它要是没了或坏了,软件就打不开或直接闪退。常见原因是软件安装不全、文件被删、或者中病毒。下面说说它是干嘛的,再给解决办法。一.ffmpeg.dll 到底是…

OkHttp 与 Stetho 结合使用:打造强大的 Android 网络调试工具链

前言在 Android 应用开发过程中,网络请求的调试一直是一个重要但具有挑战性的环节。Facebook 开发的 Stetho 是一个强大的调试工具,当它与 OkHttp 结合使用时,可以为我们提供前所未有的网络请求洞察能力。本文将详细介绍如何将这两者结合使用…

LangGraph教程10:LangGraph ReAct应用

文章目录 ReAct 预构建的代理 向 ReAct 代理添加记忆 向 ReAct 代理添加系统提示 向 ReAct 代理添加人机交互 ReAct 官方文档地址:https://langchain-ai.github.io/langgraph/how-tos/#prebuilt-react-agent 中文文档地址:https://www.aidoczh.com/langgraph/how-tos/#react…