TOC
概要
- Ubuntu 22.04で運用しているRaspberry Pi 4をいつも通りaptで更新したらdockerのメジャーアップデートが含まれていた
- Dockerの20→23のアップデートでdockerdの引数に指定する
-g
/--graph
が廃止されて、--data-root
に置き換える必要があった - Ubuntuでdockerを使っていた人はそれなりにハマっている模様
現象
ログの確認
Dockerコンテナ(docker-composeによる自動起動)が上がってこなくなったので、syslogを確認。
769770 Feb 14 16:35:34 rpi4 systemd[1397]: Started Docker Application Container Engine (Rootless).
769771 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + [ -w /run/user/1001 ]
769772 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + [ -d /home/hogehoge ]
769773 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + rootlesskit=
769774 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + command -v docker-rootlesskit
769775 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + command -v rootlesskit
769776 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + rootlesskit=rootlesskit
769777 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + break
769778 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + [ -z rootlesskit ]
769779 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + :
769780 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + :
769781 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + : builtin
769782 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + : auto
769783 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + : auto
769784 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + net=
769785 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + mtu=
769786 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + [ -z ]
769787 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + command -v slirp4netns
769788 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2072]: + slirp4netns --help
769789 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2073]: + grep -qw -- --netns-type
769790 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + net=slirp4netns
769791 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + [ -z ]
769792 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + mtu=65520
769793 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + [ -z slirp4netns ]
769794 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + [ -z 65520 ]
769795 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + dockerd=dockerd
769796 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + [ -z ]
769797 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + _DOCKERD_ROOTLESS_CHILD=1
769798 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + export _DOCKERD_ROOTLESS_CHILD
769799 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2074]: + id -u
769800 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + [ 1001 = 0 ]
769801 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + command -v selinuxenabled
769802 Feb 14 16:35:34 rpi4 dockerd-rootless.sh[2071]: + exec rootlesskit --net=slirp4netns --mtu=65520 --slirp4netns-sandbox=auto --slirp4netns-seccomp=auto --disa ble-host-loopback --port-driver=builtin --copy-up=/etc --copy-up=/run --propagation=rslave /usr/bin/dockerd-rootless.sh -g /mnt/usbhdd1/var/docker-image-rootless --storage-driver=overlay2
769804 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + [ -w /run/user/1001 ]
769805 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + [ -d /home/hogehoge ]
769806 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + rootlesskit=
769807 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + command -v docker-rootlesskit
769808 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + command -v rootlesskit
769809 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + rootlesskit=rootlesskit
769810 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + break
769811 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + [ -z rootlesskit ]
769812 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + :
769813 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + :
769814 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + : builtin
769815 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + : auto
769816 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + : auto
769817 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + net=
769818 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + mtu=
769819 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + [ -z ]
769820 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + command -v slirp4netns
769821 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2112]: +
769822 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2114]: +
769823 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2112]: slirp4netns
769824 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2114]: grep
769825 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2112]: --help
769826 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2114]: -qw
769827 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2114]: -- --netns-type
769828 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + net=slirp4netns
769829 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + [ -z ]
769830 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + mtu=65520
769831 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + [ -z slirp4netns ]
769832 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + [ -z 65520 ]
769833 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + dockerd=dockerd
769834 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + [ -z 1 ]
769835 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + [ 1 = 1 ]
769836 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + rm -f /run/docker /run/containerd /run/xtables.lock
769837 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + [ -n ]
769838 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2116]: + stat -c %T -f /etc
769839 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + [ tmpfs = tmpfs ]
769840 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + [ -L /etc/ssl ]
769841 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2117]: + realpath /etc/ssl
769842 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + realpath_etc_ssl=/etc/.ro2693256246/ssl
769843 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + rm -f /etc/ssl
769844 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + mkdir /etc/ssl
769845 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + mount --rbind /etc/.ro2693256246/ssl /etc/ssl
769846 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + exec dockerd -g /mnt/usbhdd1/var/docker-image-rootless --storage-driver=overlay2
769849 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: Flag --graph has been deprecated, Use --data-root instead
769850 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: the "graph" config file option is deprecated; use "data-root" instead
769852 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2082]: [rootlesskit:child ] error: command [/usr/bin/dockerd-rootless.sh -g /mnt/usbhdd1/var/docker-image-rootless - -storage-driver=overlay2] exited: exit status 1
769853 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2071]: [rootlesskit:parent] error: child exited: exit status 1
769854 Feb 14 16:35:35 rpi4 systemd[1397]: docker.service: Main process exited, code=exited, status=1/FAILURE
769855 Feb 14 16:35:35 rpi4 systemd[1397]: docker.service: Failed with result 'exit-code'.
769856 Feb 14 16:35:35 rpi4 systemd[1397]: docker.service: Consumed 1.509s CPU time.
応急処置
同じ事象に引っかかっているという方は応急処置をする必要はありません。読み飛ばして下さい。
最近aptで更新した時にdocker-ceが更新された記憶があったので、パッケージの履歴を確認。
$ apt-cache policy docker-ce
docker-ce:
インストールされているバージョン: 5:23.0.1-1~ubuntu.22.04~jammy
候補: 5:23.0.1-1~ubuntu.22.04~jammy
バージョンテーブル:
*** 5:23.0.1-1~ubuntu.22.04~jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:23.0.0-1~ubuntu.22.04~jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.23~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
100 /var/lib/dpkg/status
5:20.10.22~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.21~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.20~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.19~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.18~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.17~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.16~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.15~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.14~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.13~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
メジャーバージョンが20から23に上がっていたので、とりあえず23になる前の最新のパッケージに更新。
# apt-get install docker-ce=5:20.10.23~3-0~ubuntu-jammy
$ apt-cache policy docker-ce
docker-ce:
インストールされているバージョン: 5:20.10.23~3-0~ubuntu-jammy
候補: 5:23.0.1-1~ubuntu.22.04~jammy
バージョンテーブル:
5:23.0.1-1~ubuntu.22.04~jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:23.0.0-1~ubuntu.22.04~jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
*** 5:20.10.23~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
100 /var/lib/dpkg/status
5:20.10.22~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.21~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.20~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.19~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.18~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.17~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.16~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.15~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.14~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.13~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
OS再起動でdocker-composeのコンテナが上がってくることを確認して諸々の確認作業に。
Docker Engine 23.0 release notes | Docker Documentation
Docker23のリリースノートに該当しそうな記述を発見。
- Removed
- Remove the
-g
and--graph
daemon options in favor of--data-root
. docker/cli#3739 - These options have been hidden and deprecated since 17.05.
- Deprecation notice
- Remove the
syslogのエラーを今一度確認してみる。
769846 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: + exec dockerd -g /mnt/usbhdd1/var/docker-image-rootless --storage-driver=overlay2
769849 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: Flag --graph has been deprecated, Use --data-root instead
769850 Feb 14 16:35:35 rpi4 dockerd-rootless.sh[2108]: the "graph" config file option is deprecated; use "data-root" instead
graphはdeprecatedだからdata-rootに変える旨のエラーログ。graphなんか使ってたっけなと思って諸々確認した結果、短縮形は-g
でdockerdを呼び出す時に指定していましたというオチ。
コミュニティの反応
Dockerコミュニティにもそれなりの量の報告がされている。
- Ubuntu 22.04 unexpected docker socket behaviour after boot
- After upgraded to docker 23.0.0 docker service crashes every night
- After upgraded to docker 23.0.0 unable to start
- [Solved] Docker service fail to start after update
対処法
3つ目の中で
Just to inform you, I had the ‘same’ problem (I mean, not working Docker after the 23.0 upgrade), but because the depriciated graph definition in the daemon.json.
After changed that to data-root, my problem have solved.
というレスポンスがあり、一般的にはdaemon.json
というファイルで指定しているそうである(私の場合は該当しなかったが)
daemon.json
なるファイルは、ubuntu - Where’s docker’s daemon.json? (missing) - Stack Overflow によると
- /etc/docker/daemon.json
- dockerd –config-file /etc/docker/daemon.json としてdockerdコマンドの実行時に–config-fileオプションで指定
のどちらかとのことなので、さっくり確認。
# ls -la /etc/docker/
合計 20
drwxr-xr-x 2 root root 4096 1月 25 2021 .
drwxr-xr-x 158 root root 12288 2月 14 07:00 ..
-rw------- 1 root root 244 1月 25 2021 key.json
前者ではありませんでした。
うちの場合はRootless dockerを使っているので、dockerの起動は~/.config/systemd/user/docker.service
に記載している。
Dockerをrootlessに変更してrootユーザーの呪縛から開放される
$ grep ExecStart ~/.config/systemd/user/docker.service
ExecStart=/usr/bin/dockerd-rootless.sh -g /mnt/usbhdd1/var/docker-image-rootless --storage-driver=overlay2
この-g
が--graph
の短縮形なので、これを--data-root
に変える。
$ diff -u ~/.config/systemd/user/docker.service{.org,}
--- /home/hogehoge/.config/systemd/user/docker.service.org 2022-04-21 00:01:06.772710527 +0900
+++ /home/hogehoge/.config/systemd/user/docker.service 2023-02-16 00:56:20.496870673 +0900
@@ -5,7 +5,7 @@
[Service]
Environment=PATH=/usr/bin:/sbin:/usr/sbin:/home/hogehoge/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
-ExecStart=/usr/bin/dockerd-rootless.sh -g /mnt/usbhdd1/var/docker-image-rootless --storage-driver=overlay2
+ExecStart=/usr/bin/dockerd-rootless.sh --data-root /mnt/usbhdd1/var/docker-image-rootless --storage-driver=overlay2
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
systemdでリロード。
$ systemctl --user daemon-reload
$ systemctl --user restart docker
Dockerサービスとコンテナが再起動されることを確認。
docker-ceパッケージを戻して確認
上述した応急処置でdocker-ceパッケージを20に戻した場合は、もう一度docker23に戻す。
# apt-cache policy docker-ce
docker-ce:
インストールされているバージョン: 5:20.10.23~3-0~ubuntu-jammy
候補: 5:23.0.1-1~ubuntu.22.04~jammy
バージョンテーブル:
5:23.0.1-1~ubuntu.22.04~jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:23.0.0-1~ubuntu.22.04~jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
*** 5:20.10.23~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
100 /var/lib/dpkg/status
5:20.10.22~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.21~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.20~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.19~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.18~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.17~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.16~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.15~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.14~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
5:20.10.13~3-0~ubuntu-jammy 500
500 http://download.docker.com/linux/ubuntu jammy/stable arm64 Packages
# apt-get install docker-ce=5:23.0.1-1~ubuntu.22.04~jammy
dockerは自動的に再起動されると思うので、あとはOSの再起動をしてdocker-composeでコンテナが自動起動することを確認して対応終了。
余談
実は今回対応に少し時間がかかっていて、syslogに出ている「graphオプションがdeprecatedだからdata-rootに変更」でgraphオプションを書いた記憶が全くなく、短縮形のgで引っかかっていることになかなか気付きませんでした。
また、弊blog内の以下の記事を同時に修正しています。
Dockerをrootlessに変更してrootユーザーの呪縛から開放される
なんかDockerの調子が悪い→Dockerのバージョンアップで適用されるストレージドライバーが変わっていたため
スポンサーリンク
comments powered by Disqus