Pregunta ¿Cómo inicio automáticamente los contenedores de la ventana acoplable al iniciar el sistema?


¿Cuál es una buena manera de iniciar automáticamente los contenedores de la ventana acoplable cuando se inicia el sistema?

¿Hay una forma preferida de hacer esto en Ubuntu 14.04?

he usado supervisord en el pasado para iniciar automáticamente aplicaciones web. Pero eso no se siente como lo correcto para Docker.


99
2017-10-02 14:25


origen




Respuestas:


Al parecer, el método actual para iniciar automáticamente los contenedores Docker (desde Docker 1.2) es usar reiniciar políticas. 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 hace que Docker inicie automáticamente el contenedor al iniciar el sistema:

sudo docker run --restart=always -d myimage

Extracto de documentación

Políticas de reinicio Usando la bandera --restart en Docker run puedes   especifique una política de reinicio de cómo un contenedor debe o no debe ser   reiniciado en la salida.

no - No reinicie el contenedor cuando sale.

on-failure: reinicia el contenedor solo si sale con un cero.   Estado de salida.

siempre: reiniciar siempre el contenedor, independientemente del estado de salida.

También puede especificar la cantidad máxima de veces que Docker intentará   reinicie 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 redis   contenedor con una política de reinicio de siempre para que si el contenedor   sale, Docker lo reiniciará.

$ sudo docker run --restart=on-failure:10 redis

Esto ejecutará el   Contenedor redis con una política de reinicio en caso de fallo y un máximo   reinicie el conteo de 10. Si el contenedor redis sale con una salida distinta de cero   estado 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 el   política en caso de fallo.


120
2017-12-07 20:18



"siempre: reiniciar siempre el contenedor, independientemente del estado de salida" es un poco confuso. No reiniciará el contenedor si sale / detiene manualmente el contenedor, que es el comportamiento que estaba buscando. - w00t
¡increíble! gracias, inténtalo ahora. - zx1986
Nota: otra política llamada unless-stopped fue añadido. Actúa como always pero si el contenedor se detiene y el sistema se reinicia o el daemon docker se reinicia, el contenedor no se reiniciará. Vea aquí para un buen resumen de las 4 opciones. blog.codeship.com/… - David Morales
Por supuesto, el docker El demonio debe iniciarse automáticamente para admitir esto. - sherrellbc


Docker tiene esta página Eso explica cómo hacerlo con upstart y systemd. Estoy de acuerdo en que no parece ser lo correcto para Docker. Su solución es correr. docker start, que asume que ya has creado tu contenedor. Pensaría que o bien lo harías docker run --rm en el script upstart (tratándolo como un nuevo proceso y contenedor de una imagen) o simplemente deje que el demonio docker reinicie 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 logra con el inicio / parada de docker!

Creo que es extraño forzar al usuario a crear manualmente un contenedor (con todos los enlaces de puerto / volumen correctos) antes de que funcione el script upstart.


7
2017-10-14 04:49





Pero eso no se siente como lo correcto para Docker.

Por qué no?

Yo uso supervisor para esto con gran éxito.

Use lo que sabe, use lo que funciona, use algo que pueda mantener y entender fácilmente.


4
2017-10-02 14:27



Gracias @EEAA ... ¿eso significa que los ejecutas en modo no daemon? ¿No significa eso también que necesitas ejecutarlos con --rm ? - Stefan Arentz
Ejecuto los contenedores en modo de primer plano y dejo que supervisor detecte stdout / stderr. No estoy seguro de por qué --rm Es relevante aquí. - EEAA
@EEAA: sobre tu pregunta: para algunas personas, docker es un reemplazo para lxc o openvz cual tiene lxc.start.auto = 1 y vzctl set --onboot yes. También ESXi y otras soluciones de virtualización tienen esta característica incluida. Al igual que Lawrence, tampoco creo que tal característica de inicio automático se deba implementar de una manera específica de distribución, ya que un usuario de la ventana acoplable debería poder resolver el mismo problema con el mismo conocimiento en cada plataforma. - Daniel Alder
Correcto, Docker es una excelente manera de desacoplar el host de los contenedores que se ejecutan, por lo que usar la configuración específica del host es un poco hacia atrás. - nijave