維運腳本

docker-data-move.sh

來自 tool-tl/docker-data-move.sh 專案,並透過 helper.sh 重新分發,方便直接執行、維運交接與多語文件說明。

產生 Docker 遷移命令方案

一鍵命令

curl -fL 'https://www.helper.sh/docker-data-move.sh' -o './docker-data-move.sh'

此命令只會下載本站檔案,不會執行。請先檢查儲存的原始碼並核對版本,再決定是否執行。

核對已下載檔案

與本頁面建置時內建的確切位元組比較。檔案僅在目前分頁處理,此工具不上傳、不持久儲存檔案。上限2 MiB。

預期 SHA-256
5b35b743ee0609c61f6eca3666a3facb7d35b6e9742a52e5cfcf8ecefdff75e8

內建檔案位元組數: 12676

儲存校驗檔案

將腳本與校驗檔案儲存在同一目錄。Linux 安裝 GNU Coreutils 後可用下方命令僅檢查位元組,不執行腳本;使用此命令時需保留原檔名。

sha256sum --check './docker-data-move.sh.sha256'

尚未比較。

校驗值與腳本來自同一網站,不是獨立簽章。一致不證明安全、上游相依項目真實可信或適合本機;可變遠端相依項目需單獨審閱。

查看驗證與限制

執行要求

  • Linux 主機
  • 已安裝 Docker
  • 已安裝 rsync
  • 需要 root 權限
  • 可選安裝 jq 以更安全地修改 JSON

適用場景

  • 把 Docker 從已滿的根分割區或 home 分割區遷到更大的掛載點
  • 標準化磁碟告急主機的恢復流程
  • 降低修改 Docker daemon.json 時的人工作業失誤

腳本亮點

  • 自動識別目前 Docker Root Dir
  • 掃描本機磁碟並依剩餘空間推薦遷移目標
  • 切換前自動備份舊 Docker 資料目錄與 daemon 設定

推薦流程

  1. 檢查目前 Docker data-root,並估算遷移所需空間。
  2. 透過互動方式選擇目標路徑,或使用 --auto 自動挑選。
  3. 停止 Docker 服務,使用 rsync 遷移資料,更新 daemon.json 並重新啟動 Docker。
  4. 驗證新的 Docker Root Dir,並確認容器運作正常。

安全提示

  • 在正式主機執行前請先審閱腳本內容。
  • 對磁碟配置不熟時,優先使用互動模式。
  • 只有確認備份與目標容量都沒問題後再加 --yes。

相容範圍與限制

  • 需要 Linux、Docker、df、du、rsync 與 root 權限;jq 為選用。
  • Docker Engine 29+ 全新安裝若使用 containerd image store,映像內容與快照可能位於 /var/lib/containerd;此腳本只遷移 Docker Root Dir。
  • 沒有 dry-run 或自動回復。未安裝 jq 時,既有 daemon.json 會被取代為只含 data-root 的物件。目標目錄會先建立並 chown 為 root:root,再檢查是否為空;即使後續拒絕,也可能已變更目錄擁有者。

受影響的檔案、服務與資料

  • /etc/docker/daemon.json(或 CONFIG_FILE):設定 data-root;既有檔案會備份,但沒有 jq 時會被取代。
  • 停止存在的 docker/containerd 服務、rsync Docker Root Dir、將舊目錄改名為含時間戳的 .bak,再啟動服務。
  • 先建立目標目錄並設為 root:root,再檢查是否為空;ALLOW_NONEMPTY=1 會略過這項檢查。

唯讀核驗

  • 確認 `docker info --format '{{.DockerRootDir}}'` 等於所選目標路徑。
  • 檢查 `systemctl status docker containerd`、`docker ps -a` 及代表性磁碟區與映像。
  • 等業務方確認資料無誤後再處理舊 .bak 目錄;腳本不會自動復原。

失敗後的下一步

目標遭拒絕時,檢查目錄內容與擁有者,因為 mkdir/chown 已在拒絕前執行。Docker 停止後若發生錯誤,腳本沒有清理 trap,服務可能維持停止。檢查新舊資料路徑、daemon.json 與 `sudo journalctl -u docker -u containerd -n 100 --no-pager`,保留備份並手動規劃復原;不要刪除或盲目重跑。

先下載、審閱並核對版本,再決定是否執行。雜湊只能識別這一版位元組,不能證明安全。pipe 命令會立即執行遠端內容;上游依賴也可能變動。

產生 Docker 遷移命令方案

填寫你已自行核對的路徑。此工具不會探測主機或執行命令;除非主動複製或下載方案,輸入只留在目前分頁。儲存的方案可能包含私人路徑。

已審閱範圍:Linux/systemd 本機的 rootful Docker Engine、預設 docker 服務與 /etc/docker/daemon.json。Docker Desktop、rootless Docker、遠端 Docker context、自訂服務或設定路徑不在此建構器範圍內。維護前先核對 Docker context 與環境變數覆寫。

填寫路徑前先確認遷移範圍

這是你的聲明,不是主機量測結果。未知或範圍外的選擇不會產生執行命令或 JSON 方案;更改聲明會使既有方案失效。

如何唯讀核對而不改設定

僅對已授權的目標主機/常駐程式執行這些唯讀查詢,私人端點與服務設定留在本機。僅憑 context 名稱不能證明常駐程式在本機。

docker context ls
printenv DOCKER_HOST DOCKER_CONTEXT
docker info --format '{{json .SecurityOptions}}'
docker info --format '{{json .DriverStatus}}'
systemctl cat docker

DriverStatus 含 io.containerd.snapshotter.v1 表示使用 containerd image store,應停止此流程。Engine 29+ 全新安裝預設使用它,升級安裝可能不同;不要僅憑版本或 Docker Root Dir 判斷。不確定時保留「尚未核實」,不要為通過檢查而切換後端。

Docker containerd image store

先在目標 Linux 主機上唯讀查看實際 Docker Root Dir:

docker info --format '{{.DockerRootDir}}'

使用不超過 1,024 個字元的 Linux 絕對路徑;不接受結尾或重複斜線、. 或 .. 區段、反斜線及前後空白。空格與 Shell 標點會依字面值引用。

僅檢查了路徑格式與腳本的字串前綴限制。符號連結、實際 Docker 根目錄、掛載、檔案系統能力、目標是否為空、擁有者、空間、權限及備份均未驗證。腳本執行時會自行偵測 Docker 根目錄;此處填寫的目前路徑不會覆寫偵測結果。

原始碼與限制: 查看本站腳本 · Docker 資料目錄文件

查看範圍檢查與驗證限制

在本機檢查遷移日誌片段

相關專題

CentOS 7:選擇復原工作

變更已結束支援的主機前,先區分軟體庫故障、SSH 存取問題與 Docker 儲存壓力。

查看專題