要修改 Docker 鏡像的存儲位置 并遷移數據(如從 /var/lib/docker
遷移到 /mnt/data/docker
),需要以下步驟:
1. 停止 Docker 服務
在修改配置和遷移數據前,先停止 Docker 服務:
sudo systemctl stop docker
2. 修改 Docker 配置文件
編輯 Docker 的配置文件 /etc/docker/daemon.json
,設置新的存儲路徑:
{"data-root": "/mnt/data/docker"
}
- 說明:
/mnt/data/docker
是你希望存儲 Docker 數據的新路徑(需提前創建)。 - 注意:如果文件不存在,請手動創建:
sudo mkdir -p /mnt/data/docker
3. 遷移數據(使用 rsync
或 cp
)
方法 1:使用 rsync
(推薦)
sudo rsync -aP /var/lib/docker/ /mnt/data/docker/
- 參數說明:
-a
:歸檔模式(保留權限、符號鏈接等)。-P
:顯示進度和斷點續傳支持。/var/lib/docker/
:源目錄(原始 Docker 數據)。/mnt/data/docker/
:目標目錄(新存儲路徑)。
方法 2:使用 cp
sudo cp -r /var/lib/docker/* /mnt/data/docker/
- 注意:
cp
可能不會保留所有文件屬性(如權限、符號鏈接),建議優先使用rsync
。
4. 驗證數據遷移
檢查目標目錄是否有完整數據:
ls -l /mnt/data/docker/
- 應該看到
image/
、overlay2/
等 Docker 子目錄。
5. 重啟 Docker 服務
應用配置并啟動 Docker:
sudo systemctl daemon-reload
sudo systemctl start docker
6. 驗證修改是否生效
檢查 Docker 的根目錄是否已更改:
docker info | grep "Docker Root Dir"
- 輸出應顯示新路徑(例如
/mnt/data/docker
)。
7. 測試 Docker 功能
運行一個簡單容器驗證功能是否正常:
docker run hello-world
8. 清理舊數據(可選)
如果確認遷移成功且不再需要舊數據,可以刪除原始目錄:
sudo rm -rf /var/lib/docker/
注意事項
-
權限問題:
- 確保新路徑的權限允許 Docker 服務讀寫(通常為
root
用戶):sudo chown -R root:root /mnt/data/docker sudo chmod -R 755 /mnt/data/docker
- 確保新路徑的權限允許 Docker 服務讀寫(通常為
-
備份數據:
- 操作前備份原始數據(
/var/lib/docker
)以防意外。
- 操作前備份原始數據(
-
掛載點問題:
- 如果
/mnt/data
是掛載的分區,確保其在/etc/fstab
中配置為開機自動掛載,避免重啟后路徑失效。
- 如果
-
存儲驅動兼容性:
- 確保新路徑所在的文件系統支持 Docker 的存儲驅動(如
overlay2
)。
- 確保新路徑所在的文件系統支持 Docker 的存儲驅動(如
示例場景
場景 1:將 Docker 數據遷移到 SSD
- 創建新目錄并掛載 SSD:
sudo mkdir -p /mnt/ssd/docker sudo mount /dev/sdb1 /mnt/ssd
- 修改
daemon.json
:{"data-root": "/mnt/ssd/docker" }
- 遷移數據并重啟 Docker:
sudo rsync -aP /var/lib/docker/ /mnt/ssd/docker/ sudo systemctl restart docker
場景 2:解決磁盤空間不足問題
- 將 Docker 根目錄遷移到更大分區(如
/data/docker
)。 - 修改
daemon.json
并遷移數據:sudo rsync -aP /var/lib/docker/ /data/docker/ sudo systemctl restart docker
通過以上步驟,你可以安全地修改 Docker 鏡像的存儲位置并遷移數據。如果遇到問題,請檢查權限、配置文件格式或掛載點設置。