如何将 docker-compose 作为 systemd 服务运行?

coc*_*mac 7 services systemd docker

我发现了这个问题,但那个问题使用了 cron - 我想改用 systemd 服务。我docker-compose.yml的在 中/home/me,我用 运行它sudo docker compose up(并用 让它在后台运行tmux),并用 停止它sudo docker compose down

虽然功能正常,但我宁愿使用 systemd 服务来启动/停止我的docker-compose.yml文件。

如何将我的docker-compose.yml文件变成(工作的)systemd 服务?

coc*_*mac 8

我假设 docker-compose 文件位于/home/cocomac/docker-compose.yml,但您应该在我的示例中将其替换为 docker compose 文件的路径。

首先,让我们创建我们的服务文件。我个人喜欢micro文本编辑器,但可以随意使用其他编辑器。我将调用我的服务docker-compose.service,它将存储在/etc/systemd/system. 如果您愿意,可以随意使用不同的名称,但如果您这样做,请记住在遵循本答案的其余部分时使用该名称。

首先,让我们使用文本编辑器创建并打开文件:

$ micro /etc/systemd/system/docker-compose.service
Run Code Online (Sandbox Code Playgroud)

将以下内容放入文件中:

[Unit]
Description=Some personal Docker containers
After=docker.service
Requires=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash -c "docker compose -f /home/cocomac/docker-compose.yml up --detach"
ExecStop=/bin/bash -c "docker compose -f /home/cocomac/docker-compose.yml stop"

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

这为我们的服务提供了描述、启动+停止命令以及启动前需要运行的内容。请参阅此 Arch Wiki 页面,了解不同服务类型及其用途的说明RemainAfterExit

保存文件并退出文本编辑器。您现在应该能够sudo systemctl start docker-compose启动新的 systemd 服务。创建容器时可能需要一些时间,但是一旦完成启动,您就可以sudo systemctl status docker-compose检查服务的状态。您还可以sudo systemctl stop docker-compose停止它(或sudo systemctl enable docker-compose在启动时自动启动它)