systemctlのdocker.serviceファイル
何が正解かを見つけるのは道半ば。自信のない個所や試せてない箇所も多い。
設定ファイルはsystemctlで確認できる。
/lib/systemd/system/docker.serviceって書いてある。
# systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/lib/systemd/system/docker.service; disabled; vendor preset: enabled) : (省略)
書き換えたら、必ず実行必要。でもいつも忘れる。
# systemctl daemon-reload
Dockerでサービス停止するときにsocketのメッセージ
docker利用環境をcent8からubuntu20に引っ越した頃、systemctlでサービス停止するときに「ソケットまだ生きてんでー」みたいなメッセージが出るようになった。
Warning: Stopping docker.service, but it can still be activated by: docker.socket
とりあえずコンフィグレーションコメント化。
修正前)Requires=docker.socket containerd.service
修正後)# Requires=docker.socket containerd.service
あとは”-H fd://”を外す。
修正前)ExecStart=/usr/bin/dockerd -H fd:// –containerd=/run/containerd/containerd.sock -g /docker/nariDockerSys
修正後)ExecStart=/usr/bin/dockerd –containerd=/run/containerd/containerd.sock -g /docker/nariDockerSys
- 2023年2月5日追記
1月末ぐらいまではdockerのバージョンが20だったのが、昨日の朝見たら23になってた。
メジャーバージョンめっちゃ上がってるやん。
特に指定してなかったけど、ストレージドライバがdevicemapperってのをずっと使ってたみたいで、それがエラー吐き出してサービス起動失敗するようになった。
ストレージドライバって???
解説されてる方がおられる。作者さんありがとう。
今のデフォルトはoverlay2らしい。

そういうわけで、ExecStartの箇所の修正はこうしてからコンテナ全部作り直した。
コンテナ置き場のサイズ大きくなってたからいくらかダイエットできたやん。
ExecStart=/usr/bin/dockerd --storage-driver=overlay2 --data-root /docker/nariDockerSys
systemctlでデーモンの設定反映させる。
systemctl daemon-reload systemctl stop docker.service docker.socket systemctl start docker.service
これでdockerのサービス停止のときにメッセージでなくなった。
コンテナも普通に使えてる。
2022年8月追記:最近気づいたのは、systemctl stop
でまだメッセージが出力されてしまうことがあった。docker.serviceだけじゃなくdocker.socketもつける必要があった。
Dockerでコンテナの置き場を指定
rootパーティションにはOS以外のデータ置きたくない。
dockerは何も指定しないと、/var/libの中にデータ置きはじめる。
/var/lib/dockerをソフトリンクさせてみたことあったけど、挙動不審になってうまくいかなかった。
# pwd /var/lib/docker # ls -l 合計 48 drwx------ 2 root root 4096 11月 28 04:48 builder drwx--x--x 4 root root 4096 12月 12 04:17 buildkit drwx-----x 2 root root 4096 12月 15 03:39 containers drwx------ 3 root root 4096 11月 28 04:48 image drwxr-x--- 3 root root 4096 11月 28 04:48 network drwx------ 3 root root 4096 3月 5 05:28 overlay2 drwx------ 4 root root 4096 11月 28 04:48 plugins drwx------ 2 root root 4096 3月 5 05:28 runtimes drwx------ 2 root root 4096 11月 28 04:48 swarm drwx------ 2 root root 4096 3月 5 05:28 tmp drwx------ 2 root root 4096 11月 28 04:48 trust drwx-----x 4 root root 4096 3月 5 05:28 volumes #
勝手に置き場作られると、dockerがコンテナでどれぐらい消費しているのかわからなくなる。docker rmやdocker rmiしてもいくらか容量は残り続けるようなので、気分一新して完全抹消したいときはdockerサービスを停止してから、フォルダごと抹消したらいい。
cent8からubuntu20に引っ越した時コンテナ全部作り直したら、このフォルダの消費量が半分以下になってくれてメチャすっきりした。
このフォルダはコンテナ作成すると消費されるので、抹消してもビルドしなおしたら作り直される。だから日々のバックアップは取らず、docker-compose.ymlで指定する永続化領域だけをバックアップ対象にする。
Google cloudで使ってるubuntuはrootパーティション小さく使っているので、勝手に/var/lib/docker使われると困る。
そこでコンテナの置き場を/docker/nariDockerSysに指定。
残念なのは、aptでdockerのバージョンが上がると、このファイル初期化されてしまう。
手動で書き換えるの面倒。
ま、ときどき点検したいから手動で書き換えることにする。
[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target docker.socket firewalld.service containerd.service time-set.target Wants=network-online.target containerd.service ## Requires=docker.socket [Service] Type=notify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not support the cgroup feature set required # for containers run by docker ExecStart=/usr/bin/dockerd --storage-driver=overlay2 --data-root /docker/nariDockerSys ExecReload=/bin/kill -s HUP $MAINPID TimeoutStartSec=0 RestartSec=2 ## Restart=always : (省略)
ストレージドライバを指定変更して作りなおしたら、コンテナ置き場はこうなった。
# pwd /docker/nariDockerSys # ls -l 合計 56 drwx--x--x 5 root root 4096 2月 3 06:29 buildkit drwx--x--- 11 root root 4096 2月 3 07:17 containers -rw------- 1 root root 59 2月 3 06:22 engine-id drwx------ 3 root root 4096 2月 3 06:22 image drwxr-x--- 3 root root 4096 2月 3 06:22 network drwx--x--- 151 root root 16384 2月 5 02:10 overlay2 drwx------ 4 root root 4096 2月 3 06:22 plugins drwx------ 2 root root 4096 2月 5 02:10 runtimes drwx------ 2 root root 4096 2月 3 06:22 swarm drwx------ 2 root root 4096 2月 5 02:10 tmp drwx-----x 4 root root 4096 2月 5 02:10 volumes # du -shc * 1.4M buildkit 1.1M containers 4.0K engine-id 23M image 96K network 26G overlay2 16K plugins 4.0K runtimes 4.0K swarm 4.0K tmp 4.4M volumes 26G 合計 #
動いてるコンテナ9個あるから、そりゃ26GBぐらいになるか。
$ docker ps -a | awk '{print $2}' ID redhat:9gvis redhat:8gvis ubu:22gvis steveltn/https-portal:1 sv_django:4 mariadb:10.5.7 docker_sv_jupyter osixia/phpldapadmin:latest osixia/openldap:latest $
コメント