LoginSignup
3
2

More than 3 years have passed since last update.

Fedora 31 にアップグレードするとDocker(moby-engine)が動かなくなる場合の仮対応

Posted at

状況

Fedora を31 にアップグレードすると、Docker が起動しなくなってしまった。

# systemctl start docker                                                                                                                                                                                                       .130
Job for docker.service failed because the control process exited with error code.
See "systemctl status docker.service" and "journalctl -xe" for details.

journalctl でログを見ると、以下のようなメッセージが出力されていました。

myserver systemd[1]: Starting Docker Application Container Engine...
myserver dockerd[pppp]: time="yyyy-mm-ddThh:mm:ss.SSS" level=info msg="libcontainerd: new containerd process, pid: pppp"
myserver dockerd[pppp]: time="yyyy-mm-ddThh:mm:ss.SSS" level=warning msg="failed to rename /var/lib/docker/tmp for background deletion: %!s(<nil>). Deleting synchronously"
myserver dockerd[pppp]: time="yyyy-mm-ddThh:mm:ss.SSS" level=warning msg="devmapper: Usage of loopback devices is strongly discouraged for production use. Please use `--storage-opt dm.thinpooldev` or use `man ...
myserver dockerd[pppp]: time="yyyy-mm-ddThh:mm:ss.SSS" level=warning msg="devmapper: Base device already exists and has filesystem xfs on it. User specified filesystem  will be ignored."
myserver dockerd[pppp]: time="yyyy-mm-ddThh:mm:ss.SSS" level=info msg="[graphdriver] using prior storage driver: devicemapper"
myserver dockerd[pppp]: time="yyyy-mm-ddThh:mm:ss.SSS" level=info msg="Graph migration to content-addressability took 0.00 seconds"
myserver dockerd[pppp]: time="yyyy-mm-ddThh:mm:ss.SSS" level=warning msg="Your kernel does not support cgroup memory limit"
myserver dockerd[pppp]: time="yyyy-mm-ddThh:mm:ss.SSS" level=warning msg="Unable to find cpu cgroup in mounts"
myserver dockerd[pppp]: time="yyyy-mm-ddThh:mm:ss.SSS" level=warning msg="Unable to find blkio cgroup in mounts"
myserver dockerd[pppp]: time="yyyy-mm-ddThh:mm:ss.SSS" level=warning msg="Unable to find cpuset cgroup in mounts"
myserver dockerd[pppp]: time="yyyy-mm-ddThh:mm:ss.SSS" level=warning msg="mountpoint for pids not found"
myserver dockerd[pppp]: Error starting daemon: Devices cgroup isn't mounted

その中で、Error starting daemon: Devices cgroup isn't mounted というメッセージが今回の直接的な原因とみて、これを起点に調査を開始したところ、以下のページがヒットしました。

原因としてはFedora 31 からsystemd が使うcgroup がcgroup v1 からcgroup v2 に変更されたためで、Docker(moby-engine) がまだそれに対応していないためです。
Fedora チームとしては、Docker の対応を待つ方針のようで、Fedora サイドからDocker に合わせて対応することはなさそうです。

しかしDocker が使えなくなるのは、人によってはかなり困ることになるかと思います。
ということでFedora 31 にて、かろうじてDocker を動かす方法について、備忘録として残しておこうと思います。

起動kernel コマンドラインパラメータの変更

cgroup v2 を使用しないようにするために、起動時のkernel コマンドラインパラメータにてunified_cgroup_hierarchy=0 (false)を指定するようにします。
これを0 に設定することでハイブリットもしくはレガシーなcgroup ヒエラルキを使用するようになります。

/etc/sysconfig/grub ファイルを開き、GRUB_CMDLINE_LINUX 変数の値を以下のように変更します。

/etc/sysconfig/grub
GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora/root rd.lvm.lv=fedora/swap rhgb quiet console=ttyS0,115200"
↓ ↓ ↓
GRUB_CMDLINE_LINUX="rd.lvm.lv=fedora/root rd.lvm.lv=fedora/swap rhgb quiet console=ttyS0,115200 systemd.unified_cgroup_hierarchy=0"

変更が完了したら、grub.cfg ファイルのリビルドを行います。

grub.cfgのリビルド
  # BIOS boot の場合
# grub2-mkconfig -o /boot/grub2/grub.cfg
  # EFI boot の場合
# grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg

リビルドが完了したらOS を再起動し、Docker が正常に起動することを確認してください。

まとめ

Fedora にてDocker を使っている場合は、まだFedora 31 にアップグレードしないほうが良いかも知れません。
Fedora 31 にアップグレードしてしまった人は、Docker(moby-engine) がcgroup v2 に対応するのも時間の問題と思うので、それまでは本対応を実施して運用をするのが良いでしょう。

参考

3
2
0

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
3
2