Debian Busterを最新バージョン(Bullseye)に正常にアップグレードした後、再起動または終了しようとするたびに、次のメッセージでいくつかのプロセスが完了するのを待っている間に完了するのに数分かかります。
watchdog: watchdog0: watchdog did not stop!
systemd-shutdown[1]: Syncing filesystem and block devices.
systemd-shutdown[1]: Sending SIGTERM to remaining process...
systemd-journald[372]: Received SIGTERM from PID 1 (systemd-shutdown).
systemd-shutdown[1]: waiting for process: containerd-shim.
私のシステムにDockerがインストールされていますが、これが問題の原因であるようです。
$ ps aux | grep containerd-shim
root 3420 0.0 0.1 1451744 21876 ? Sl 11:07 0:00 /usr/bin/containerd-shim-runc-v2 -namespace moby -id 0dd6b89a62d...66cc5c0a44b6f01d77c -address /run/containerd/containerd.sock
$ dpkg -S /usr/bin/containerd-shim-runc-v2
containerd: /usr/bin/containerd-shim-runc-v2
$ aptitude why containerd
i docker.io Depends containerd
システムを再起動する前に、Dockerのサービス/ソケットを停止してみました。変更なし。
この問題を解決する方法を知っていますか?
$ docker version
Client:
Version: 20.10.5+dfsg1
API version: 1.41
Go version: go1.15.9
Git commit: 55c4c88
Built: Wed Aug 4 19:55:57 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server:
Engine:
Version: 20.10.5+dfsg1
API version: 1.41 (minimum version 1.12)
Go version: go1.15.9
Git commit: 363e9a8
Built: Wed Aug 4 19:55:57 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.5~ds1
GitCommit: 1.4.5~ds1-2
runc:
Version: 1.0.0~rc93+ds1
GitCommit: 1.0.0~rc93+ds1-5+b2
docker-init:
Version: 0.19.0
GitCommit:
ベストアンサー1
これは、リアルタイムリカバリを使用する場合のContainerd shim v2の既知の問題です。 Containerd ≥ 1.6.0-rc.2で修正されました。 Containerd 1.5.10にバックポートされました。 Docker Engine 20.10.13で修正されました。
- https://github.com/moby/moby/issues/41831
- https://github.com/containerd/containerd/issues/5502
- https://github.com/containerd/containerd/pull/5828
解決策:
v2の代わりにshim v1を使用する
特定のコンテナの実行時指定
docker run --runtime=io.containerd.runtime.v1.linux ...`
または、システム全体のデフォルトのランタイムを設定します。
# cat /etc/docker/daemon.json { "default-runtime": "io.containerd.runtime.v1.linux", "live-restore": true }
警告する:shim v1 は廃止され、次のバージョンの Docker から削除される予定です。 警告する:shim v1はcgroups v2では機能しません。
再起動/終了前にsystemdサービスを使用してコンテナを終了する
# /etc/systemd/system/containerd-shim-v2-workaround.service [Unit] Description=containerd-shim v2 workaround Before=docker.service Requires=containerd.service After=containerd.service [Service] Type=oneshot RemainAfterExit=yes ExecStop=-/bin/sh -c '[ "$(systemctl is-system-running)" = "stopping" ] || exit 0; ctr -n moby tasks ls -q | xargs -r -L1 ctr -n moby tasks kill; ctr -n moby containers ls -q | xargs -r ctr -n moby containers rm' [Install] WantedBy=containerd.service
私はこれをmoby質問スレッドの下に投稿しました。ただし、これはすべてのユースケースに適しているとは限りません。注意して使用してください。