2016-12-22 44 views
0

我已经编写了systemd脚本,用于在ubuntu 16.04 LTS服务器中启动docker容器,使用dcoker-composesystemd服务未在重新启动时运行

这里是脚本文件/etc/systemd/system/swoop.mongo.service

[Unit] 
Description=Swoop MongoDb Server container 
Requires=docker.service 
After=docker.service 

[Service] 
TimeoutStartSec=0 

ExecStart=/usr/bin/docker-compose -f /var/www/swoop/docker-compose.yml up -d mongo3 mongo2 mongo1 mongosetup 

Restart=always 
RestartSec=10s 
Type=notify 
NotifyAccess=all 

[Install] 
WantedBy=local.target 

当我开始sudo systemctl start swoop.mongo.service它运作良好的服务。 当我重新启动服务器时,它会失败,并且服务的状态将变为非活动状态。

$ systemctl status swoop.app.service 
● swoop.app.service - Swoop App Server container 
Loaded: loaded (/etc/systemd/system/swoop.app.service; disabled; vendor preset: enabled) 
Active: inactive (dead) 
+3

你是否启用了它? 'systemctl enable swoop.mongo' – nos

+0

不,还没有。让我试试 –

+0

@nos非常感谢,它的工作原理。你可以把它写成我会接受的答案。 –

回答

1

没有为docker run命令选项--restart=always,如果你没有在运行的容器一些特殊的要求,我会建议。

概念同样适用于docker-compose

restart: always

政策:

  • no:退出时不自动重新启动容器。这是默认的 。
  • on-failure[:max-retries]:仅在容器以 非零退出状态退出时重新启动。或者,限制Docker守护程序尝试重新启动重试次数 。
  • always:始终重新启动容器,无论退出状态如何。 当您始终指定时,Docker守护程序将尝试无限期地重新启动容器 。无论容器的当前状态如何,容器始终会始终启动 守护进程启动。
  • unless-stopped:始终重新启动容器,无论退出 状态如何,但如果容器之前已将 置于停止状态,则不要在守护进程启动时启动该容器。

现在,只要您的systemd服务已启用,您需要启用该服务,以便在reboots之后自动启动该服务。

sudo systemctl enable <service name>

更新:

您将需要更换WantedBy=local.targetWantedBy=multi-user.target

multi-user.target:多用户,非图形。用户通常可以通过多个控制台或通过网络登录 。

+0

我还必须将'WantedBy = local.target'更改为'WantedBy = multi-user.target'才能使其工作。 –

+0

更新了答案,以防我们可以帮助他人。 –

+0

'multi-user'而不是'multiuser'对吗? –