LoginSignup
27

More than 5 years have passed since last update.

dockerで、pathの場所を、/var/lib/dockerから/mnt/foobar/に変更する方法 (Fedora版)

Posted at

結論

% sudo systemctl stop docker.service
% sudo mkdir /mnt/foobar/docker
% sudo vim /etc/sysconfig/docker
% grep OPTIONS /etc/sysconfig/docker
OPTIONS='--selinux-enabled -g /mnt/foobar/docker'
% sudo systemctl start docker.service

/var/lib/docker をシンボリックリンクにするのはだめ

"... is not an absolute path or is a symlink" といったメッセージが出て起動できない。

http://stackoverflow.com/questions/24309526/how-to-change-the-docker-image-installation-directory/27950326#27950326 に書かれているが、シンボリックリンクに対する rm(1) の問題のため禁止にしているようだ。

Don't use a symbolic Link to move the docker folder to /mnt (for example). This may cause in trouble with the docker rm command.

Better use the -g Option for docker. On Ubuntu you can set it permanently in /etc/default/docker.io. Enhance or replace the DOCKER_OPTS Line.

Here an example: `DOCKER_OPTS="-g /mnt/somewhere/else/docker/"

よって docker の設定で他のディレクトリに設定するのが正しい(好ましい)ようだ。ここで -g は docker(1) の下記オプションのことだ:

-g="", --graph=""
Path to use as the root of the Docker runtime. Default is /var/lib/docker.

設定ファイル

/usr/lib/systemd/system/docker.service が systemd における docker サービスの設定ファイル。

/usr/lib/systemd/system/docker.service
% (snip)
[Service]
Type=notify
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
ExecStart=/usr/bin/docker -d \
          $OPTIONS \
          $DOCKER_STORAGE_OPTIONS \
          $DOCKER_NETWORK_OPTIONS \
          $INSECURE_REGISTRY
% (snip)

ここで docker(1) への引数 -g を指定してもよいが、これは設定ファイルではないことになっているので弄らない方がよろしい。

% rpm -qc docker-io
/etc/sysconfig/docker
/etc/sysconfig/docker-network
/etc/sysconfig/docker-storage

RPM 的には /etc/sysconfig/docker* が設定ファイルなので、docker.service から EnvironmentFile として参照されているファイルを編集して欲しいらしい。

/etc/sysconfig/docker
# /etc/sysconfig/docker

# Modify these options if you want to change the way the docker daemon runs
OPTIONS='--selinux-enabled'
DOCKER_CERT_PATH=/etc/docker

# ...snip...

ここで OPTIONS を下記のように変更する:

/etc/sysconfig/docker
OPTIONS='--selinux-enabled -g /mnt/foobar/docker'

すると /usr/lib/systemd/system/docker.serviceExecStart における $OPTIONS に反映されるので docker の path が変わる。

なお、Ubuntu では DOCKER_OPTS に '-g /mnt/foobar/docker' を追記するようにかかれているが、これは upstart/systemd の設定ファイルに起因するものなので Fedora と Ubuntu は異なる。

Fedora 以外で systemd を使っているディストリビューションにおいても /etc/sysconfig/docker といったサービスの設定ファイルを見てから、適切な設定ファイルに適切な環境変数に '-g /mnt/foobar/docker' を追記するという風にできると思われる(注:詳細未調査)。

参考文献

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27