2016-12-22 78 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'對嗎? –