KazuProg's notes

技術メモや備忘録などを自由気ままに書き連ねています

dockerの保存先ディレクトリを変更する

作成日: ・ 更新日:

dockerをデフォルトのまま使用していると、システムディスクの容量がどんどん消費されてしまうため、外付けHDDにdockerの保存先を移行させた

まずは、dockerdを停止させる

$ sudo systemctl stop docker.socket
$ sudo systemctl stop docker.service

移行先ディレクトリを作成し、データを移動させる

$ sudo mkdir -p [移行先ディレクトリ]
$ sudo mv /var/lib/docker [移行先ディレクトリ]

dockerdの設定ファイル( /etc/docker/daemon.json )を作成し、以下を上書き(orファイルがすでにあれば追記)

{
  "data-root": "[移行先ディレクトリ]"
}

dockerdを起動

$ sudo systemctl daemon-reload
$ sudo service docker start

設定が反映されているか確認し、 [移行先ディレクトリ] が表示されればOK!

$ docker info | grep "Docker Root Dir"
Docker Root Dir: [移行先ディレクトリ]

shファイルにまとめた

sudo systemctl stop docker.socket
sudo systemctl stop docker.service

sudo mkdir -p [移行先ディレクトリ]
sudo mv /var/lib/docker [移行先ディレクトリ]

echo -e "{\n  \"data-root\": \"[移行先ディレクトリ]\"\n}" | sudo tee /etc/docker/daemon.json

sudo systemctl daemon-reload
sudo service docker start

Docker実行時にエラーが発生

Dockerの保存先パスにシンボリックリンクが使用されている場合、以下のようなエラーが発生する。

$ docker compose up -d
Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: invalid rootfs: not an absolute path, or a symlink: unknown

解決策として、 ln -s の代わりに mount --bind を使用すればこのエラーを回避できる。

$ sudo mount --bind [元ディレクトリ] [マウント先ディレクトリ]

参考