Featured image of post 更改 Docker 預設儲存目錄完整指南

更改 Docker 預設儲存目錄完整指南

詳細教學如何安全地更改 Docker 預設儲存目錄,避免系統磁碟空間不足,包含備份、遷移和驗證步驟。

最後更新
約 1240 字

前言

Docker 預設將所有映像檔、容器、卷和網路配置儲存在 /var/lib/docker 目錄下。隨著 Docker 使用量的增加,這個目錄可能會快速消耗系統磁碟空間,特別是在以下情況:

  • 使用 Raspberry Pi 或 MiniPC 等儲存空間有限的裝置
  • 頻繁建立和刪除容器
  • 使用大型映像檔
  • 累積大量未清理的映像檔和容器

本指南將詳細說明如何安全地將 Docker 儲存目錄遷移到其他位置,確保資料完整性和系統穩定性。

事前準備

檢查當前 Docker 使用情況

在開始遷移前,建議先檢查當前 Docker 的磁碟使用情況:

1
2
3
4
5
6
7
8
9
# 檢查 Docker 目錄大小
sudo du -sh /var/lib/docker

# 檢查系統磁碟空間
df -h

# 列出 Docker 映像檔和容器
docker images
docker ps -a

選擇新的儲存位置

選擇新儲存位置時需考慮:

  • 足夠的磁碟空間:建議至少是當前 Docker 目錄大小的 2-3 倍
  • 效能考量:SSD 優於傳統硬碟,特別是對於頻繁的 I/O 操作
  • 權限設定:確保 Docker 有適當的讀寫權限

常見的選擇:

  • /opt/docker - 適合獨立磁碟分割區
  • /home/docker - 適合個人使用環境
  • /mnt/external/docker - 適合外部儲存裝置

遷移步驟

步驟 1:停止 Docker 服務

1
2
3
4
5
# 停止 Docker 服務
sudo systemctl stop docker

# 確認服務已停止
sudo systemctl status docker

步驟 2:備份現有資料

重要:在進行任何修改前,務必先備份現有資料。

1
2
3
4
5
# 創建備份目錄
sudo mkdir -p /backup/docker-backup-$(date +%Y%m%d)

# 備份 Docker 目錄
sudo cp -r /var/lib/docker /backup/docker-backup-$(date +%Y%m%d)/

步驟 3:創建新目錄並設定權限

1
2
3
4
5
6
# 創建新的 Docker 目錄
sudo mkdir -p /new/docker/path

# 設定適當的權限
sudo chown root:root /new/docker/path
sudo chmod 755 /new/docker/path

步驟 4:配置 Docker daemon

創建或編輯 /etc/docker/daemon.json 檔案:

1
sudo nano /etc/docker/daemon.json

添加以下內容:

1
2
3
4
5
6
7
8
{
  "data-root": "/new/docker/path",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

步驟 5:遷移資料

使用 rsync 進行資料遷移,這比 cp 更安全且支援斷點續傳:

1
2
3
4
5
# 使用 rsync 複製資料(保留權限和時間戳)
sudo rsync -avxP /var/lib/docker/ /new/docker/path/

# 驗證遷移完整性
sudo rsync -avxP --dry-run /var/lib/docker/ /new/docker/path/

步驟 6:重命名舊目錄

為了安全起見,先重命名舊目錄而不是直接刪除:

1
sudo mv /var/lib/docker /var/lib/docker.backup.$(date +%Y%m%d)

步驟 7:創建符號連結(可選)

如果您希望保持 /var/lib/docker 路徑的相容性,可以創建符號連結:

1
sudo ln -s /new/docker/path /var/lib/docker

步驟 8:啟動 Docker 服務

1
2
3
4
5
6
7
8
9
# 啟動 Docker 服務
sudo systemctl start docker

# 檢查服務狀態
sudo systemctl status docker

# 驗證 Docker 是否正常運作
docker version
docker info

驗證遷移結果

檢查 Docker 資訊

1
2
3
4
5
6
# 查看 Docker 根目錄
docker info | grep "Docker Root Dir"

# 檢查映像檔和容器
docker images
docker ps -a

測試 Docker 功能

1
2
3
4
5
6
7
8
# 測試拉取映像檔
docker pull hello-world

# 測試運行容器
docker run hello-world

# 清理測試容器
docker rmi hello-world

清理舊資料

確認新配置運作正常後,可以清理舊的備份資料:

1
2
3
# 等待 24-48 小時確認系統穩定後再執行
sudo rm -rf /var/lib/docker.backup.*
sudo rm -rf /backup/docker-backup-*

常見問題與解決方案

問題 1:權限錯誤

如果遇到權限問題:

1
2
3
4
5
6
# 檢查目錄權限
ls -la /new/docker/path

# 修正權限
sudo chown -R root:root /new/docker/path
sudo chmod -R 755 /new/docker/path

問題 2:Docker 服務無法啟動

檢查 daemon 配置:

1
2
3
4
5
# 檢查配置檔案語法
sudo docker daemon --config-file /etc/docker/daemon.json --validate

# 查看 Docker 日誌
sudo journalctl -u docker.service

問題 3:磁碟空間不足

如果新位置空間不足:

1
2
3
4
5
# 清理未使用的 Docker 資源
docker system prune -a

# 檢查磁碟使用情況
du -sh /new/docker/path

最佳實踐建議

  1. 定期清理:設定定期清理未使用的映像檔和容器
  2. 監控空間:定期監控新位置的磁碟使用情況
  3. 備份策略:建立定期備份策略
  4. 效能優化:考慮使用 SSD 或 RAID 配置提升效能

總結

成功遷移 Docker 儲存目錄後,您將獲得:

  • 更多的磁碟空間用於系統運作
  • 更好的 Docker 效能(如果使用 SSD)
  • 更靈活的儲存管理選項

記住,在進行任何系統級修改前,務必做好備份,並在測試環境中先驗證步驟的正確性。


使用 Hugo 建立
主題 StackJimmy 設計