如何“重置”docker-compose systemd 服务?

nwi*_*ler 4 systemd docker docker-compose

我创建了systemd一个使用 Docker-Compose 启动一组 Docker 容器的服务,如本答案所述

# /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
Run Code Online (Sandbox Code Playgroud)

这允许我使用以下命令启动 Docker-Compose 服务

sudo systemctl start docker-compose-app
Run Code Online (Sandbox Code Playgroud)

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

sudo systemctl stop docker-compose-app
Run Code Online (Sandbox Code Playgroud)

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

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

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

我怎么跑

docker-compose down -v
Run Code Online (Sandbox Code Playgroud)

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

Jan*_*raj 5

您可以尝试使用ExecReload定义:

ExecReload=/usr/local/bin/docker-compose down -v && /usr/local/bin/docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

然后你可以使用:

sudo systemctl reload docker-compose-app
Run Code Online (Sandbox Code Playgroud)

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