systemd 不会停止 Docker 应用程序容器引擎

mei*_*luk 5 systemd docker 18.04

问题:每次我重新启动或关闭时,由于 systemd 试图停止 Docker 应用程序引擎,我必须等待任意分钟数。

系统:

  • 联想 Thinkpad x260 上的 xubuntu 18.04
  • DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.1 LTS"
  • 通过 apt 安装的 docker
  • docker --versionDocker version 18.09.0-ce-tp5, build 9eb3d36
  • systemctl --versionsystemd 237 +PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid
  • 在关闭请求时没有容器正在运行。我事先明确停止并删除了它们(docker container ls --all什么也没显示)。

行为:单击“关闭”或“重新启动”按钮后,GUI 关闭并显示带有旋转图标的 xubuntu 徽标。按Esc,我对 systemd 服务状态屏幕表示欢迎。仅出现 2-3 行(如下图所示),然后我必须等待任意长的时间(积极观察 1 分钟到 25 分钟之间的值)。因为我不能保证 systemd 很快就会终止,所以我通常使用硬件按钮来关闭我的机器。出现此问题是因为我的系统上安装了 docker。

systemd 消息的照片

[ OK ] Started Show Plymouth Power Off Screen.
[   *] A stop job is running for Docker Application Container Engine (14s / no limit)[ OK ] Started Show Plymouth Power Off Screen.
[ ** ] A stop job is running for Docker Application Container Engine (24min 27s / no limit)
Run Code Online (Sandbox Code Playgroud)

问题:如何让 docker 优雅地停止?

小智 1

我偶尔会遇到这个问题,但我不确定为什么 docker 挂起。但我发现,在 docker-ce 部署的服务文件中,超时被明确设置为无限制:

$ grep Timeout /lib/systemd/system/docker.service 
TimeoutSec=0
Run Code Online (Sandbox Code Playgroud)

为了避免长时间挂起,我TimeoutStopSec在覆盖中设置了参数:

$ sudo systemctl edit docker.service
Run Code Online (Sandbox Code Playgroud)

添加以下行:

[Service]
TimeoutStopSec=300
Run Code Online (Sandbox Code Playgroud)

然后重新加载:

$ sudo systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)