为什么Docker容器在Ubuntu 12.04上没有启动脚本的情况下无法在启动时启动?


15

使用有关在运行Ubuntu 12.04和Docker 0.8.1的Linode VPS上自动启动 Docker的说明,指定的容器不会在重新启动时启动。

一旦启动,我就能

~$ sudo start [service-name]

一切都按计划进行,但我也想让容器在重启后重启。

教程中的脚本是否不旨在处理重启?

/ etc / default / docker文件包含一行:

DOCKER_OPTS="-r=false"

/etc/init/service-name.conf直接来自docker页面:

description "service description"                                                                                                            
author "me"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
    # Wait for docker to finish starting up first.
    FILE=/var/run/docker.sock
    while [ ! -e $FILE ] ; do
        inotifywait -t 2 -e create $(dirname $FILE)
    done
    /usr/bin/docker start -a db5e61a9afa8
end script

2
您的暴发户脚本的内容是什么/etc/default/docker
Bruno Pereira 2014年

Answers:


6

在过去几个月的某个时候,本教程中的upstart脚本已更改,以删除循环以等待docker启动。我从新手脚本中删除了循环,现在我的容器在重新启动后可以正确重新启动。

我的/etc/init/service-name.conf脚本现在看起来像这样:

description "service description"                                                                                                            
author "me"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
    /usr/bin/docker start -a db5e61a9afa8
end script

我不确定该循环出了什么问题。尽管我没有对默认的docker安装进行任何更改,但这也许是指向我系统上的错误文件。就目前而言,我很高兴解决此问题涉及删除代码,而不是一些复杂的解决方法。


更改docker作业以发出信号(docker-started)并让该信号触发容器作业开始会更加暴躁。
MikeyB 2014年

您不能通过发出command来停止容器stop service-name。我正在面对这个问题:(
艾哈迈德·哈弗

3

对于使用ubuntu 14.04的apt-get docker版本的任何人。您只需要更改启动脚本即可等待“ docker.io”而不是“ docker”,如下所示:

description "Docker startup script for yum_repo"
author "me"
start on filesystem and started docker.io
stop on runlevel [!2345]
respawn
script
  /usr/local/bin/docker start -a yum_repo_run
end script

1

我使用Ubuntu 13.10作为主机,但遇到了同样的问题。我发现docker在其中为docker安装了rc脚本,/etc/init.d/docker同时在/etc/init/docker.conf中安装了upstart脚本。我只需要删除rc脚本即可/etc/init.d/docker解决此问题。

希望这也对您有用。


可悲的是,这个对我没有用。
2014年

0
DOCKER_OPTS="-r=false"

这意味着:不要重新启动以前运行的容器。

删除该-r选项或将其更改为true。


2
是的,但要点是让新贵的句柄容器重新启动,而不是docker守护进程。如果docker守护程序在重新启动时启动容器,则upstart无法管理该过程。
2014年

0

/var/run/docker.sock是一个套接字,因此您需要-S在测试存在性时使用:

FILE=/var/run/docker.sock
while [ ! -S $FILE ] ; do
    inotifywait -t 2 -e create $(dirname $FILE)
done
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.