磁盤滿后,重新掛載磁盤,docker 遷移

1、遷移目標(biāo)

將 Docker 的默認(rèn)存儲(chǔ)目錄(通常是 /var/lib/docker)從舊磁盤遷移到新掛載的磁盤(例如您剛掛載的 /data 目錄)。

2、前提條件

新磁盤(如 /dev/sdb1)已經(jīng)格式化并掛載到了某個(gè)目錄,例如 /data。

確認(rèn) Docker 當(dāng)前的使用狀態(tài)和存儲(chǔ)路徑。

詳細(xì)步驟

第一步:確認(rèn)當(dāng)前 Docker 狀態(tài)和存儲(chǔ)目錄

查看 Docker 當(dāng)前使用的存儲(chǔ)目錄:

sudo docker info | grep "Docker Root Dir"

輸出通常是:Docker Root Dir: /var/lib/docker

停止 Docker 服務(wù):
這是最關(guān)鍵的一步,必須確保 Docker 完全停止,否則數(shù)據(jù)會(huì)損壞。

sudo systemctl stop docker

同時(shí)停止 containerd(如果有)

sudo systemctl stop containerd

驗(yàn)證是否停止:

sudo systemctl status docker

第二步:同步數(shù)據(jù)到新位置

我們使用 rsync 來同步數(shù)據(jù),因?yàn)樗鼙A羲形募?quán)限和屬性,這對(duì)于 Docker 至關(guān)重要。

使用 rsync 復(fù)制數(shù)據(jù)(假設(shè)新掛載點(diǎn)是 /data):

sudo rsync -avxP /var/lib/docker/ /data/docker/

-a:歸檔模式,保留所有屬性(權(quán)限、所有權(quán)、時(shí)間戳等)

-v: verbose,顯示詳細(xì)過程

-x:保持文件系統(tǒng)邊界,不跨越不同文件系統(tǒng)

-P:顯示進(jìn)度,并支持?jǐn)帱c(diǎn)續(xù)傳

這個(gè)過程可能需要一段時(shí)間,取決于 /var/lib/docker 的大小。

第三步:備份并修改 Docker 配置

我們需要告訴 Docker 使用新的存儲(chǔ)位置。

備份原有的 Docker 目錄(重命名而不是刪除,以防萬一):

sudo mv /var/lib/docker /var/lib/docker.bak

創(chuàng)建軟鏈接(Symbolic Link)【推薦方法】:

創(chuàng)建一個(gè)指向新位置的軟鏈接:

sudo ln -s /data/docker /var/lib/docker

驗(yàn)證軟鏈接:

ls -l /var/lib | grep docker

應(yīng)該看到類似 docker -> /data/docker 的輸出。

或者:修改 daemon.json 配置文件【可選方法】:

編輯 Docker 的配置文件:

sudo nano /etc/docker/daemon.json

如果文件不存在,就創(chuàng)建一個(gè)。添加以下內(nèi)容(指定新的數(shù)據(jù)路徑):

json
{
  "data-root": "/data/docker"
}

保存并退出。

說明:兩種方法任選其一即可。創(chuàng)建軟鏈接更簡單直觀,與系統(tǒng)耦合度低;修改配置文件是 Docker 官方支持的方式。我個(gè)人更常用軟鏈接方法。

第四步:重啟 Docker 并驗(yàn)證

啟動(dòng) Docker 服務(wù):

sudo systemctl start docker
sudo systemctl start containerd

驗(yàn)證 Docker 服務(wù)狀態(tài)和新存儲(chǔ)路徑:

sudo systemctl status docker # 確保狀態(tài)是 active (running)
sudo docker info | grep "Docker Root Dir" # 確認(rèn)新的路徑是否正確

如果使用軟鏈接,這里顯示的還是 /var/lib/docker,但它實(shí)際指向了 /data/docker。
如果使用修改 daemon.json 的方法,這里會(huì)直接顯示 Docker Root Dir: /data/docker。

驗(yàn)證容器和鏡像是否完好:

sudo docker images # 查看所有鏡像是否都在
sudo docker ps -a # 查看所有容器(包括已停止的)是否都在

嘗試啟動(dòng)一個(gè)之前的容器進(jìn)行測試:

sudo docker start <container_name_or_id>
sudo docker ps # 查看是否運(yùn)行成功

第五步:清理舊數(shù)據(jù)(確認(rèn)無誤后)

非常重要: 只有在確認(rèn) Docker 在新位置運(yùn)行完全正常,所有容器、鏡像、數(shù)據(jù)卷都正確無誤后,才能執(zhí)行這一步。

刪除之前備份的舊數(shù)據(jù)

sudo rm -rf /var/lib/docker.bak

總結(jié):操作流程一覽表
步驟 命令 說明

  1. 確認(rèn)狀態(tài) docker info | grep "Docker Root Dir" 查看當(dāng)前存儲(chǔ)路徑
  2. 停止服務(wù) systemctl stop docker containerd 必須停止,防止數(shù)據(jù)損壞
  3. 同步數(shù)據(jù) rsync -avxP /var/lib/docker/ /data/docker/ 保留權(quán)限復(fù)制數(shù)據(jù)
  4. 備份舊目錄 mv /var/lib/docker /var/lib/docker.bak 安全起見,先重命名
  5. 創(chuàng)建軟鏈 ln -s /data/docker /var/lib/docker 讓系統(tǒng)認(rèn)為新目錄就是老地方
  6. 重啟驗(yàn)證 systemctl start docker 啟動(dòng)服務(wù)
    docker images docker ps -a 檢查所有數(shù)據(jù)是否完好
  7. 清理 rm -rf /var/lib/docker.bak 最終確認(rèn)無誤后再刪除
    按照這個(gè)流程,您可以安全無損地將 Docker 的整個(gè)運(yùn)行環(huán)境遷移到新的磁盤上,所有服務(wù)、容器、鏡像、網(wǎng)絡(luò)和卷配置都會(huì)得到保留。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容