Aparentemente, el método actual para iniciar automáticamente los contenedores Docker ( desde Docker 1.2 ) es usar políticas de reinicio . Esto controlará cómo Docker debe manejar el inicio del contenedor al iniciar y reiniciar el contenedor cuando sale. He usado la opción 'siempre' hasta ahora, y puedo confirmar que Docker inicia automáticamente el contenedor en el arranque del sistema:
Reiniciar políticas Con el indicador --restart en la ejecución de Docker, puede especificar una política de reinicio de cómo un contenedor debe o no reiniciarse al salir.
no: no reinicie el contenedor cuando salga.
en caso de fallo: reinicie el contenedor solo si sale con un estado de salida distinto de cero.
always: reinicia siempre el contenedor independientemente del estado de salida.
También puede especificar la cantidad máxima de veces que Docker intentará reiniciar el contenedor cuando use la política de falla. El valor predeterminado es que Docker intentará siempre reiniciar el contenedor.
$ sudo docker run --restart=always redis
Esto ejecutará el contenedor de redis con una política de reinicio de siempre, de modo que si el contenedor se cierra, Docker lo reiniciará.
$ sudo docker run --restart=on-failure:10 redis
Esto ejecutará el contenedor de redis con una política de reinicio de falla y un recuento máximo de reinicio de 10. Si el contenedor de redis sale con un estado de salida distinto de cero más de 10 veces seguidas, Docker abortará al intentar reiniciar el contenedor. Proporcionar un límite máximo de reinicio solo es válido para la política en caso de fallo.
unless-stopped
se agregó otra política llamada . Actúa así,always
pero si se detiene el contenedor y se reinicia el sistema o si se reinicia el demonio de Docker, el contenedor no se reiniciará. Vea aquí una buena reseñadocker
demonio debe iniciarse automáticamente para admitir esto.Docker tiene esta página que explica cómo hacerlo con upstart y systemd. Estoy de acuerdo en que no parece ser lo correcto para Docker. Su solución es ejecutar
docker start
, lo que supone que ya ha creado su contenedor. Creo que lo haríadocker run --rm
en la secuencia de comandos inicial (tratándolo como un proceso y un contenedor nuevos a partir de una imagen) o simplemente dejaría que el demonio docker reiniciara los contenedores en el arranque (como lo hará de forma predeterminada si no hace nada más ) Upstart tiene la ventaja de permitir un inicio / detención fácil de los procesos, ¡pero eso también se obtiene con el inicio / detención de Docker!Creo que es extraño forzar al usuario a crear manualmente un contenedor (con todos los enlaces correctos de puerto / volumen) antes de que funcione el script inicial.
fuente
Por qué no?
Utilizo supervisor para esto con gran éxito.
Usa lo que sabes, usa lo que funciona, usa algo que puedas mantener y entender fácilmente.
fuente
--rm
?--rm
es relevante aquí.docker
es un reemplazo delxc
oopenvz
que tienenlxc.start.auto = 1
yvzctl set --onboot yes
. También ESXi y otras soluciones de virtualización tienen dicha característica incluida. Al igual que Lawrence, tampoco creo que una función de inicio automático de este tipo deba implementarse de una manera específica de distribución porque un usuario de Docker debería poder resolver el mismo problema con el mismo conocimiento en cada plataforma.