修改 docker 容器的掛載配置(保持數據不丟的情況)

一、核心原理

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…