小编ber*_*rty的帖子

如何将 Docker 容器正确处理为 systemd 服务?

我通过 systemd 单元处理由 docker 容器实现的许多服务(数据库、Web 服务器...)。它可以工作,但是系统需要很长时间才能关闭,显然是在等待 docker 服务关闭。

这是我在 Debian Stretch 下使用 Docker CE 在虚拟机中制作的 systemd 单元的示例:

/lib/systemd/system/mariadb.service

[Unit]
Description=MariaDB
After=docker.service
Requires=docker.service

[Service]
TimeoutStartSec=0
Restart=always
ExecStart=/usr/bin/docker run --rm \
    --name=mariadb \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=root \
    -e MYSQL_DATABASE=test \
    -e MYSQL_USER=user \
    -e MYSQL_PASSWORD=user \
    -v /var/lib/mysql:/var/lib/mysql \
    mariadb:latest
ExecStop=-/usr/bin/docker stop mariadb # See UPDATEs 1 & 2

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

当我使用 systemctl 命令时,服务会在几秒钟内正确启动和停止。但是当我关闭系统时,它显示:

虚拟机截图 1 虚拟机截图 2 虚拟机截图 3

持续时间超过3分钟。如果有许多容器通过 systemd 运行,则可能会更长。

该问题并非特定于 MariaDB。

有没有更好的方法来通过 systemd 处理 docker 容器,避免额外的关机时间?

  • 更新 1:正如 Bennett Hardwick 在评论中建议的那样,我尝试从服务的定义中删除 ExecStop …

debian systemd docker debian-stretch

4
推荐指数
1
解决办法
4124
查看次数

标签 统计

debian ×1

debian-stretch ×1

docker ×1

systemd ×1