docker-compose 的 systemd 服务模板

这是我将 docker-compose 服务作为 systemd 服务运行的模板:

my-service.service
; 保存为例如 /etc/systemd/system/my-service.service
[Unit]
Description=MyService
Requires=docker.service
After=docker.service

[Service]
Restart=always
User=uli
Group=docker
; 当单元停止时关闭容器(如果正在运行)
ExecStartPre=/usr/local/bin/docker-compose -f /home/uli/mydockerservice/docker-compose.yml down -v
; 当单元启动时启动容器
ExecStart=/usr/local/bin/docker-compose -f /home/uli/mydockerservice/docker-compose.yml up
; 当单元停止时停止容器
ExecStop=/usr/local/bin/docker-compose -f /home/uli/mydockerservice/docker-compose.yml down -v

[Install]
WantedBy=multi-user.target

为了让它为你的应用程序启动和运行,你需要修改几件事:

  1. 检查你的 docker-compose 是否在 /usr/local/bin/docker-compose(就像我一样,因为我使用 Ubuntu 18.04 官方 docker 仓库的 docker-ce 安装)或在 /usr/bin/docker-compose(在这种情况下你需要在服务文件中的所有 3 个位置设置正确的 docker-compose 路径)
  2. 确保你要运行 docker-compose 的用户(在此示例中为 uli)是 docker 组的成员(sudo usermod -a -G docker <user>),并在 User=... 行中设置正确的用户
  3. 为你的服务定义一个名称,该名称应反映在服务文件名和 Description=... 行中
  4. 在所有 Exec…=… 行中为你的 docker-compose YML 配置文件设置正确的路径(即将 /home/uli/mydockerservice/docker-compose.yml 替换为你的 YML 路径)。

之后,你可以使用以下命令启动你的服务

start_my_service.sh
sudo systemctl start my-service # --> my-service.service,使用你命名的文件名

并可选择在开机时启用它:

enable_services.sh
systemctl enable docker # Docker 是你的服务所需的,所以你也需要启用它!
systemctl enable my-service # --> my-service.service,使用你命名的文件名

Check out similar posts by category: Container, Docker, Linux