運用スクリプト

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

チェックサムファイルを保存

スクリプトとチェックサムを同じディレクトリに保存してください。GNU Coreutils のある Linux では次のコマンドでバイト列だけを検査できます。スクリプトは実行しません。コマンドには元のファイル名が必要です。

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

まだ照合していません。

スクリプトとチェックサムは同じサイトから取得し、独立した署名ではありません。一致しても安全性、上流の真正性、ホストへの適合性は証明しません。可変の依存先は別途確認してください。

検証と制限を読む

実行条件

  • Linux ホスト
  • Docker インストール済み
  • rsync インストール済み
  • root 権限
  • jq は JSON 更新をより安全に行うため任意

適用場面

  • 逼迫した root または home ファイルシステムから大きいマウントへ Docker を移行
  • ディスク逼迫ホストの復旧手順を標準化する
  • Docker daemon.json 更新時の手作業ミスを減らす

主なポイント

  • 現在の Docker Root Dir を自動検出
  • ローカルディスクを走査し、空き容量順に移行先を提案
  • 切り替え前に旧 Docker データディレクトリと daemon 設定をバックアップ

推奨手順

  1. 現在の Docker data-root を確認し、必要な空き容量を見積もります。
  2. 対話操作または --auto で適切な移行先を選びます。
  3. Docker サービスを停止し、rsync でデータ移行後、daemon.json を更新して再起動します。
  4. 新しい Docker Root Dir を検証し、コンテナが正常か確認します。

注意事項

  • 本番ホストで実行する前に必ずスクリプト内容を確認してください。
  • ストレージ構成に不慣れな場合は対話モードを優先してください。
  • --yes を付ける前にバックアップと容量を確認してください。

対応範囲と制限

  • Linux、Docker、df、du、rsync が必要で、root 権限が必要です。jq は任意です。
  • containerd image store を使う Docker Engine 29 以降の新規環境では、イメージ内容やスナップショットが /var/lib/containerd に残る場合があります。このスクリプトが移動するのは Docker Root Dir のみです。
  • dry-run と自動ロールバックはありません。jq がない場合、既存 daemon.json は data-root のみの内容に置き換わります。移行先は空か確認する前に作成され、root:root に変更されるため、拒否された場合もディレクトリ所有者が変わることがあります。

変更されるファイル、サービス、データ

  • /etc/docker/daemon.json(または CONFIG_FILE)の data-root を設定します。既存設定はバックアップされますが、jq がないと置き換えられます。
  • docker と containerd を停止し、Docker Root Dir を rsync し、旧ディレクトリを日時付き .bak 名に変更してからサービスを起動します。
  • 移行先ディレクトリを作成して root:root に変更した後、空であることを確認します。ALLOW_NONEMPTY=1 はこの確認を省略します。

読み取り専用の確認

  • `docker info --format '{{.DockerRootDir}}'` が選択した移行先と一致することを確認します。
  • `systemctl status docker containerd`、`docker ps -a`、代表的な volume と image を確認します。
  • アプリケーション担当者の確認が済むまで旧 .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 コンテキスト、独自サービス・設定パスは対象外です。メンテナンス前にコンテキストと環境変数の上書きを確認してください。

パス入力の前に移行範囲を確認

利用者による申告であり、ホストの計測結果ではありません。不明・対象外の場合は実行コマンドや JSON 計画を作りません。申告を変えると既存計画は無効になります。

設定を変えずに確認する方法

認可された対象ホスト・デーモンに対してのみ読み取り確認を行います。非公開の接続先やサービス設定は手元に保管してください。コンテキスト名だけではローカルだと証明できません。

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}}'

絶対 Linux パスを 1,024 文字以内で指定します。末尾・連続スラッシュ、. や ..、バックスラッシュ、前後の空白は使えません。空白やシェル記号はリテラルとして引用します。

確認したのはパスの書式とスクリプトの接頭辞制限のみです。シンボリックリンク、実際の Docker ルート、マウント、ファイルシステム機能、空の移行先、所有者、容量、権限、バックアップは未確認です。実行時にはスクリプト自身が Docker ルートを検出し、この入力値で上書きしません。

ソースと制限事項: 同梱スクリプトを見る · Docker のデータディレクトリ資料

範囲確認の検証と制限を読む

移行ログの抜粋を手元で確認

関連トピック

CentOS 7: 復旧作業の選び方

サポート終了済みホストを変更する前に、リポジトリ、SSH、Docker の容量不足を切り分けます。

トピックを見る