docker - 如何 "reset"docker-compose systemd 服务?

标签 docker docker-compose systemd

我创建了一个 systemd使用 Docker-Compose 启动一组 Docker 容器的服务,如 this answer 中所述:

# /etc/systemd/system/docker-compose-app.service

[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/srv/docker
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target

这允许我使用以下命令启动 Docker-Compose 服务
sudo systemctl start docker-compose-app

使用 docker-compose up -d在引擎盖下,并使用关闭它们
sudo systemctl stop docker-compose-app

使用 docker-compose down .请注意 down命令在没有 -v 的情况下运行标志,这意味着卷将保留在原位,在重新启动/重新创建时保留我的容器的数据。在大多数情况下,这几乎是我想要的。

有些情况我想删除服务中的所有数据,基本上是运行 down -v命令而不仅仅是 down .

有没有办法扩展上面的systemd服务定义以允许额外的命令(或使用现有的 systemctl 命令之一),这将允许我偶尔运行 down -v如果需要的话。如果需要,我想临时执行此操作,而不是安排时间或类似的操作。

我怎么跑
docker-compose down -v

如果需要,偶尔通过相同的 systemd设置,同时保持在重新启动时维护容器数据的标准功能?

最佳答案

您可以尝试使用 ExecReload定义:

ExecReload=/usr/local/bin/docker-compose down -v && /usr/local/bin/docker-compose up -d

然后你可以使用:
sudo systemctl reload docker-compose-app

所以在这种情况下,“reload”命令将用于“reset”。

关于docker - 如何 "reset"docker-compose systemd 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58957074/

相关文章:

docker - traefik+docker-compose获取let's encrypt子域证书失败

python - 系统服务音频输出

networking - 如何将 Unix POSIX 文件描述符或标准输入句柄转换为套接字?

docker - kubernetes 调度昂贵的资源

php - Docker PHP MySQL 连接被拒绝

mongodb - 副本集 mongo docker-compose

docker - 我可以在一个命令中使用 docker-compose 运行多个服务吗?

python - Docker-compose 无法导入 Django (ModuleNotFoundError)

Docker Windows 容器和 NFS 卷

c++ - sd_journal_send 发送二进制数据。如何使用 journalctl 检索数据?