結論
% 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 サービスの設定ファイル。
% (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
# Modify these options if you want to change the way the docker daemon runs
OPTIONS='--selinux-enabled'
DOCKER_CERT_PATH=/etc/docker
# ...snip...
ここで OPTIONS
を下記のように変更する:
OPTIONS='--selinux-enabled -g /mnt/foobar/docker'
すると /usr/lib/systemd/system/docker.service
の ExecStart
における $OPTIONS
に反映されるので docker の path が変わる。
なお、Ubuntu では DOCKER_OPTS
に '-g /mnt/foobar/docker' を追記するようにかかれているが、これは upstart/systemd の設定ファイルに起因するものなので Fedora と Ubuntu は異なる。
Fedora 以外で systemd を使っているディストリビューションにおいても /etc/sysconfig/docker
といったサービスの設定ファイルを見てから、適切な設定ファイルに適切な環境変数に '-g /mnt/foobar/docker' を追記するという風にできると思われる(注:詳細未調査)。
参考文献
- "How to change the docker image installation directory?", Stackoverflow
- "Set Docker_Opts in centos", Stackoverflow