Por que o contêiner do docker não inicia no boot com script inicial no Ubuntu 12.04?

15

Usando as instruções para o Docker iniciar automaticamente no Linode VPS executando o Ubuntu 12.04 e o Docker 0.8.1, o contêiner especificado não inicia na reinicialização.

Depois de inicializado, posso

~$ sudo start [service-name]

e tudo corre conforme o planejado, mas eu também gostaria de contêiner para reiniciar após uma reinicialização.

O script no tutorial não foi projetado para lidar com reinicializações?

O arquivo / etc / default / docker contém uma linha:

DOCKER_OPTS="-r=false"

O /etc/init/service-name.conf é direto da página da janela de encaixe:

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
jody
fonte
2
Qual é o conteúdo do seu script inicial e /etc/default/docker?
Bruno Pereira

Respostas:

6

Em algum momento nos últimos dois meses, o script inicial no tutorial foi alterado para remover o loop e aguardar o início do docker. Eu removi o loop dos meus scripts iniciantes e meus contêineres agora são reiniciados corretamente após uma reinicialização.

Meu script /etc/init/service-name.conf agora se parece com isso:

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

Não tenho certeza do que havia de errado com esse loop. Talvez estivesse apontando para o arquivo errado no meu sistema, embora eu não tenha feito alterações na instalação padrão do docker. Por enquanto, estou feliz por a correção envolver a remoção do código, em vez de uma solução alternativa complicada.

jody
fonte
Seria mais inicial mudar o trabalho do docker para emitir um sinal (iniciado pelo docker) e fazer com que esse sinal acionasse o início dos trabalhos do contêiner.
MikeyB
Você não pode parar o contêiner dessa maneira emitindo comando stop service-name. Estou enfrentando esse problema :(
Ahmed Al Hafoudh
3

Para quem usa o ubuntu 14.04 apt-get sabor do docker. Você só precisa alterar o script de inicialização para esperar no "docker.io" e não no "docker" da seguinte forma:

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
falcon006
fonte
1

Estou usando o Ubuntu 13.10 como host e tive o mesmo problema. Descobri que o docker instala um script rc para o docker no/etc/init.d/docker e, ao mesmo tempo, instala um script inicial em /etc/init/docker.conf. Eu apenas tive que remover o script rc /etc/init.d/dockerpara que esse problema desaparecesse.

Espero que isso funcione para você também.

Sameer Naik
fonte
Infelizmente, este não funcionou para mim.
jody
0
DOCKER_OPTS="-r=false"

Isso significa: Não reinicie os contêineres em execução anteriormente.

Remova a -ropção ou altere-a para true.

MikeyB
fonte
2
Certo, mas o objetivo é que o contêiner de identificador inicial seja reiniciado, não o daemon do docker. Se o daemon do docker iniciar o contêiner na reinicialização, o processo não poderá ser gerenciado pelo iniciante.
Jody
0

/var/run/docker.socké um soquete, então você precisa usá-lo -Sao testar a existência:

FILE=/var/run/docker.sock
while [ ! -S $FILE ] ; do
    inotifywait -t 2 -e create $(dirname $FILE)
done
j.szwedko
fonte