如何在启动时运行docker-compose?


20

这是在运行Docker的Ubuntu 14.04 LTS VM上,我怀疑respawn是造成问题的原因,但不确定理想的解决方案。

当前的新贵脚本(cat /etc/init/dockersuitecrm.conf

description "Start docker containers"
author "Batman"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
    docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start
end script

这种“有效”的方式myapp是活跃且响应迅速的,但是/sbin/init当我使用进行监视时,它会占用所有CPU htop。如果我从upstart(sudo rm /etc/init/dockersuitecrm.conf)中删除该条目并手动进行SSH并运行,docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start我看不到CPU出现100%问题,并且像以前一样myapp仍然活跃且响应迅速。

所以我怀疑我上面启动docker-compose的方式是不正确的。什么是正确的开始方式,docker-compose始终在没有人工干预的情况下运行?

编辑:没关系,但/usr/bin/myapp -> /home/batman/dockerapps/myapp作为符号链接。


不是解决方案,而是一种解决方法,我可以respawn在脚本中没有命令的情况下运行它。
DeepSpace101 2015年

同样的问题,但是我看到了:serverfault.com/questions/615820/…。神奇之处在于使用docker-compose start
Mark Lopez

我有一个类似的配置,但不使用script块。也许这是问题的一部分?我有chdir /usr/bin/myapp/和在下一行exec docker-compose up
jmreicha 2015年

您是否只想在后台运行docker-compose?即docker-compose up -d
KCD

重新启动:始终在容器规格中
Lu32

Answers:


9

只需使用crontab,而不是使用时间间隔,只需说@reboot

因此,以应启动此脚本的用户身份登录并键入命令

crontab -e

然后输入

@reboot /better/enter/fullpath/here/docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start

重新启动系统,然后查看它是否有效。相对于暴发户来说,有一个优势,即使它是稍晚才开始的,您也不必担心诸如网络等依赖关系就已经崛起了。


知道重新启动的干净程度如何吗?
贾斯汀·史密斯

1
抱歉,但这不是一个很好的答案。它可能会不时起作用,但是由于可能在其他docker要求之前加载了cron,因此您遇到了竞争状况。
奥瑟斯'17


0

Docker尚未立即准备就绪如果您过早运行脚本,将不会发生任何事情。docker准备就绪后,它将立即开始响应docker ps命令,因此您可以在crontab中使用此技巧:

纳米/ etc / crontabs / root

@reboot / usr / bin / docker ps && / usr / bin / docker-compose -f /prod.yml start

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.