¿Cómo puedo iniciar automáticamente los contenedores Docker al arrancar el sistema?

¿Cuál es una buena manera de iniciar automáticamente los contenedores docker cuando el sistema arranca?

¿Hay alguna forma preferida de hacerlo en Ubuntu 14.04?

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

Solución

Aparentemente, el método actual para auto-iniciar contenedores Docker (desde Docker 1.2) es usar restart policies. Esto controlará cómo Docker debe manejar el inicio del contenedor al arrancar y el reinicio del contenedor cuando sale. He utilizado la opción "always" hasta ahora, y puedo confirmar que hace que Docker auto-inicie el contenedor en el arranque del sistema:

sudo docker run --restart=always -d myimage

Extracto de la documentación

Políticas de reinicio Usando la opción --restart en la ejecución de Docker puedes

especificar una política de reinicio sobre cómo un contenedor debe o no ser reiniciado al salir.

no - No reiniciar el contenedor cuando sale. &gt on-failure - Reinicia el contenedor sólo si sale con un estado de salida distinto de cero. estado de salida. &gt 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 utilice la política on-failure. El valor por defecto es que Docker intentará siempre reiniciar el contenedor.

$ sudo docker run --restart=always redis Esto ejecutará el contenedor redis con una política de reinicio de siempre de modo que si el contenedor sale, Docker lo reiniciará. &gt $ sudo docker run --restart=on-failure:10 redis Esto ejecutará el contenedor redis con una política de reinicio de on-failure y un número máximo de reinicios de máximo de 10 reinicios. Si el contenedor redis sale con un estado exit más de 10 veces seguidas, Docker abortará el intento de reiniciar el contenedor. el contenedor. Proporcionar un límite máximo de reinicio sólo es válido para la opción política on-failure.

Comentarios (4)

Docker tiene esta página que explica cómo hacerlo con upstart y systemd. Estoy de acuerdo en que no parece lo más adecuado para Docker. Su solución es ejecutar docker start, que asume que ya has creado tu contenedor. Yo pensaría que o bien ejecutas docker run --rm en el script upstart (tratándolo como un nuevo proceso y contenedor a partir de una imagen) o simplemente dejas que el demonio docker reinicie los contenedores por sí mismo en el arranque (como lo hará por defecto si no haces nada más). Upstart tiene la ventaja de permitir un arranque/parada fácil de los procesos, ¡pero eso también se consigue con el arranque/parada de docker!

Creo que es raro forzar al usuario a crear manualmente un contenedor (con todos los puertos/volúmenes correctos) antes de que el script upstart funcione.

Comentarios (2)

Pero eso no parece lo más adecuado para Docker.

¿Por qué no?

Yo uso supervisord para esto con gran éxito.

Usa lo que sabes, usa lo que funciona, usa algo que puedas mantener y entender fácilmente.

Comentarios (4)