Docker移動安裝目錄的2種實現(xiàn)過程
運(yùn)行Docker移動安裝目錄實現(xiàn)方案(軟鏈接+配置修改)
一、核心前提:明確 Docker 核心目錄
Docker 默認(rèn)數(shù)據(jù)存儲目錄為 /var/lib/docker(含鏡像、容器、網(wǎng)絡(luò)、存儲等核心數(shù)據(jù)),所有遷移操作均圍繞該目錄展開。
先通過以下命令確認(rèn)目錄信息:
#1. 查看默認(rèn)目錄是否存在 ls -ld /var/lib/docker #2. 查看目錄占用空間(新目錄需至少滿足此空間) du -sh /var/lib/docker #3. (可選)查看當(dāng)前Docker數(shù)據(jù)目錄配置(驗證默認(rèn)路徑) docker info | grep "Docker Root Dir"
二、核心原理:兩種方案的底層邏輯對比
| 方案類型 | 核心邏輯 | 優(yōu)勢 | 劣勢 | 適用場景 |
|---|---|---|---|---|
| 軟鏈接方案 | 通過ln -s創(chuàng)建 “舊路徑→新路徑” 的軟鏈接,系統(tǒng)訪問舊路徑時自動跳轉(zhuǎn)至新路徑 | 無需改配置、操作簡單、可逆性強(qiáng) | 依賴新路徑穩(wěn)定性(如掛載盤卸載會失效) | 臨時遷移、快速擴(kuò)展、不熟悉配置修改 |
| 配置修改方案 | 編輯 Docker 配置文件(daemon.json),指定新數(shù)據(jù)目錄,Docker 直接讀取新路徑 | 長期穩(wěn)定、不依賴軟鏈接、適合生產(chǎn)環(huán)境 | 需修改配置、操作步驟稍多 | 長期遷移、生產(chǎn)環(huán)境、新路徑固定 |
三、方案一:軟鏈接實現(xiàn)(快速遷移,無需改配置)
1. 操作步驟(同前序優(yōu)化版,核心為 “移動 + 軟鏈接跳轉(zhuǎn)”)
(1)停止 Docker 服務(wù)(必做,避免數(shù)據(jù)損壞)
#適用于Ubuntu/CentOS 7+/Debian等systemd系統(tǒng) sudo systemctl stop docker sudo systemctl disable docker # 臨時禁用開機(jī)啟動,防止操作中自動重啟 #適用于CentOS 6等sysvinit系統(tǒng) #sudo service docker stop
驗證停止:sudo systemctl status docker 顯示 “inactive (dead)” 即成功。
(2)備份原目錄(可選但強(qiáng)烈建議)
#壓縮備份到/root目錄,文件名含日期便于區(qū)分 sudo tar -zcvf /root/docker-backup-\$(date +%Y%m%d).tar.gz /var/lib/docker
(3)移動原目錄到新位置(示例新目錄:/data/docker)
#1. 創(chuàng)建新目錄(父目錄不存在時自動創(chuàng)建) sudo mkdir -p /data/docker #2. 移動原目錄(保留文件權(quán)限、屬性,比復(fù)制更安全) sudo mv /var/lib/docker /data/docker
驗證移動:ls -l /data/docker 能看到containers、images等子目錄即成功。
(4)創(chuàng)建軟鏈接(舊路徑指向新路徑)
#命令格式:ln -s 新目錄 舊目錄(順序不可反!) sudo ln -s /data/docker /var/lib/docker
驗證鏈接:ls -l /var/lib/ | grep docker 顯示 “/var/lib/docker -> /data/docker” 即正確。
(5)重啟 Docker 并驗證
#恢復(fù)開機(jī)啟動+重啟 sudo systemctl enable docker && sudo systemctl start docker #驗證功能:查看鏡像、啟動測試容器 sudo docker images # 應(yīng)與遷移前一致 sudo docker run --rm hello-world # 成功輸出歡迎信息即正常
四、方案二:修改配置文件(移動文件 + 指定新目錄,長期穩(wěn)定)
1. 操作步驟(核心為 “移動 + 配置指定新路徑”)
(1)停止 Docker 服務(wù)(同方案一,必做)
sudo systemctl stop docker sudo systemctl disable docker
(2)備份原目錄(同方案一,防數(shù)據(jù)丟失)
sudo tar -zcvf /root/docker-backup-\$(date +%Y%m%d).tar.gz /var/lib/docker
(3)移動原目錄到新位置(示例新目錄:/home/docker)
#1. 創(chuàng)建新目錄 sudo mkdir -p /home/docker #2. 移動原目錄(與方案一一致,保留完整數(shù)據(jù)結(jié)構(gòu)) sudo mv /var/lib/docker /home/docker
(4)修改 Docker 配置文件(daemon.json)
Docker 通過/etc/docker/daemon.json讀取自定義配置,若文件不存在需新建:
#1. 編輯/創(chuàng)建配置文件(用vim或nano,示例用vim)
sudo vim /etc/docker/daemon.json
#2. 寫入以下內(nèi)容(指定新數(shù)據(jù)目錄,路徑替換為你的實際新目錄)
{
"data-root": "/home/docker" # 關(guān)鍵配置:指定Docker新數(shù)據(jù)根目錄
}
#3. 保存退出(vim中按Esc,輸入:wq回車)
注意:若原文件已有內(nèi)容(如鏡像加速配置),只需新增"data-root": "新路徑",保持 JSON 格式正確(逗號分隔,無多余符號)
示例:
{
"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"], # 原有加速配置
"data-root": "/home/docker" # 新增的新目錄配置
}
(5)重載配置并重啟 Docker
#1. 重載systemd配置(使新的daemon.json生效) sudo systemctl daemon-reload #2. 恢復(fù)開機(jī)啟動+重啟Docker sudo systemctl enable docker && sudo systemctl start docker
(6)驗證配置與數(shù)據(jù)完整性
#1. 驗證新目錄是否生效(查看Docker Root Dir是否為新路徑) docker info | grep "Docker Root Dir" # 應(yīng)顯示“Docker Root Dir: /home/docker” #2. 驗證數(shù)據(jù):查看鏡像、容器是否正常 sudo docker images sudo docker ps -a #3. 測試功能:啟動測試容器 sudo docker run --rm hello-world
五、兩種方案的常見問題排查
1. 共性問題:Docker 啟動失敗
#查看日志定位原因(核心排查手段) sudo journalctl -u docker # systemd系統(tǒng) #或查看Docker原生日志 sudo cat /var/log/docker.log
- 權(quán)限不足:新目錄需與原目錄權(quán)限一致(通常為
root:root,權(quán)限 700):
#方案一/二通用,替換路徑為你的新目錄 sudo chown -R root:root /data/docker # 或/home/docker sudo chmod -R 700 /data/docker
- 配置格式錯誤(僅方案二):
daemon.json格式錯誤會導(dǎo)致啟動失敗,可通過以下命令檢查格式:
#安裝jq工具(若未安裝) sudo apt install jq # Ubuntu/Debian #或 sudo yum install jq # CentOS/RHEL #檢查配置文件格式 jq . /etc/docker/daemon.json # 無報錯則格式正確
2. 個性問題
- 軟鏈接無效(方案一):
ls -l /var/lib/docker若顯示 “broken link”,需重新創(chuàng)建軟鏈接(確保新目錄路徑正確,無拼寫錯誤)。 - 舊目錄殘留(方案二):遷移后
/var/lib/docker可能為空目錄(因已移動),可手動刪除(需確認(rèn)備份完成):sudo rm -rf /var/lib/docker。
操作總結(jié)
兩種方案核心差異:
- 軟鏈接方案靠 “路徑跳轉(zhuǎn)”,無需改配置,適合臨時場景;
- 配置修改方案靠 “主動指定新路徑”,長期穩(wěn)定,適合生產(chǎn)環(huán)境。
必遵循的核心原則:
- 無論哪種方案,必須先停止 Docker 服務(wù)(運(yùn)行中移動會導(dǎo)致數(shù)據(jù)損壞);
- 務(wù)必備份原目錄(遷移失敗可恢復(fù),尤其生產(chǎn)環(huán)境);
- 新目錄需滿足 “空間充足 + 權(quán)限正確(root:root,700)+ 路徑穩(wěn)定”。
選擇建議:
- 臨時擴(kuò)展磁盤、快速遷移:選軟鏈接方案;
- 生產(chǎn)環(huán)境、長期固定新路徑:選配置修改方案。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker 本地導(dǎo)入鏡像/保存鏡像/載入鏡像/刪除鏡像的方法
這篇文章主要介紹了Docker 本地導(dǎo)入鏡像/保存鏡像/載入鏡像/刪除鏡像的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12
SpringCloud基于Docker和Docker-Compose的項目部署過程
本文介紹了如何卸載舊版本Docker、更新系統(tǒng)、安裝Docker及其依賴,并設(shè)置國內(nèi)鏡像源以加快下載速度,詳細(xì)說明了如何安裝Docker Compose、配置鏡像加速器,并展示了如何使用Docker Compose部署SpringCloud項目,提供了更新和重啟容器的方法2024-10-10
Docker buildx構(gòu)建多平臺鏡像并推送到私有倉庫的方法
這篇文章主要介紹了Docker buildx構(gòu)建多平臺鏡像并推送到私有倉庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
docker registry 鏡像同步的實現(xiàn)思路
這篇文章主要介紹了docker registry 鏡像同步的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
docker部署mysql 實現(xiàn)遠(yuǎn)程連接的示例代碼
這篇文章主要介紹了docker部署mysql 實現(xiàn)遠(yuǎn)程連接的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

