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

Dee*_*101 20 server upstart 14.04 docker

这是在运行 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
Run Code Online (Sandbox Code Playgroud)

这种“有效”的方式myapp是活跃且响应/sbin/init迅速,但当我使用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作为符号链接。

s1m*_*mel 9

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

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

crontab -e
Run Code Online (Sandbox Code Playgroud)

然后输入

@reboot /better/enter/fullpath/here/docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start
Run Code Online (Sandbox Code Playgroud)

重新启动系统,看看它是否有效。与 upstart 相比有一个优势,即使它启动得晚一点,您也不必担心网络等依赖项已经启动。

  • 抱歉,但这不是一个很好的答案。它可能有时会起作用,但由于 cron 可能会在其他 docker 要求之前加载,因此您会遇到竞争条件。 (2认同)