【发布时间】:2023-01-25 16:06:04
【问题描述】:
我经常在我的笔记本电脑上部署用于开发的 docker 容器,然后关闭我的计算机而忘记关闭 docker 容器。令我惊讶的是,多次重启后这些容器仍在运行。
我怎样才能改变这种行为,以便任何 docker 容器,无论容器是否附加了重启策略,都不会在下次启动时重新启动?
我正在运行 Linux,docker 通过 systemd 运行。
【问题讨论】:
标签: linux docker containers systemd
我经常在我的笔记本电脑上部署用于开发的 docker 容器,然后关闭我的计算机而忘记关闭 docker 容器。令我惊讶的是,多次重启后这些容器仍在运行。
我怎样才能改变这种行为,以便任何 docker 容器,无论容器是否附加了重启策略,都不会在下次启动时重新启动?
我正在运行 Linux,docker 通过 systemd 运行。
【问题讨论】:
标签: linux docker containers systemd
您可以通过创建依赖于 docker 的 oneshot systemd 服务(通过 After= 设置顺序)然后在关闭时运行脚本来停止并删除所有容器来完成此操作。
系统服务(即放在/etc/systemd/system/shutdown-docker-containers.service):
[Unit]
Description="Service to prevent restarting docker containers on next bootup"
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/opt/docker-container-shutdown.sh
[Install]
WantedBy=docker.service
删除 docker 容器的脚本 (/opt/docker-container-shutdown.sh):
#!/usr/bin/env bash
containers=$(docker ps -q)
[ -z "$containers" ] || {
docker stop $containers
docker rm $containers
}
最后,使脚本可执行,重新加载 systemd,并启用服务:
sudo chmod +x /opt/docker-container-shutdown.sh
sudo systemctl daemon-reload
sudo systemctl enable --now docker-container-shutdown.sh
【讨论】: