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为了让它为你的应用程序启动和运行,你需要修改几件事:
- 检查你的 docker-compose 是否在
/usr/local/bin/docker-compose(就像我一样,因为我使用 Ubuntu 18.04 官方 docker 仓库的docker-ce安装)或在/usr/bin/docker-compose(在这种情况下你需要在服务文件中的所有 3 个位置设置正确的docker-compose路径) - 确保你要运行 docker-compose 的用户(在此示例中为
uli)是 docker 组的成员(sudo usermod -a -G docker <user>),并在User=...行中设置正确的用户 - 为你的服务定义一个名称,该名称应反映在服务文件名和
Description=...行中 - 在所有 Exec…=… 行中为你的
docker-composeYML 配置文件设置正确的路径(即将/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,使用你命名的文件名If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow