【问题标题】:How to "reset" a docker-compose systemd service?如何“重置” docker-compose systemd 服务?
【发布时间】:2020-03-16 07:58:05
【问题描述】:

我创建了一个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 设置,同时保持跨重启维护容器数据的标准功能?

【问题讨论】:

  • 出于好奇,为什么不直接使用 compose 来处理生命周期,例如是否能够自动启动撰写“服务”?
  • 不确定我理解你的意思。你能详细说明一下吗?我有另一个 systemd 服务,它依赖于 docker-compose 启动的容器,因此需要确保 docker-compose 在服务器启动时启动。我认为使用 systemd 来启动容器很方便。总的来说效果很好,但后来出现了关于down -v 的问题......
  • 您解释了为什么需要这样做:)。一旦我使用了容器,我会尝试将它一直保持在容器中。翻译:如果可以的话,我不会让操作系统服务依赖于容器中的某些东西。
  • 是的 - 这是一个开发服务器,不会对生产做同样的事情......另一个驱动因素是我想通过 Ansible 自动化这个,systemd 服务被 Ansible 很好地理解.如果需要,我可能只需要通过 Ansible 的 shell 模块运行普通的 docker-compose down -v,其他所有内容都保留在 systemd 中以处理服务器重启......

标签: docker docker-compose systemd


【解决方案1】:

您可以尝试使用ExecReload 定义:

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

然后你可以使用:

sudo systemctl reload docker-compose-app

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

【讨论】:

  • 谢谢你的建议,我试试看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
  • 2021-09-30
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多