Supongo que tengo un contenedor Docker que quiero ejecutar, luego puedo llamar
$ docker run ...
y todo esta bien. ¿Existe una forma incorporada de ejecutar un contenedor de manera que se reinicie automáticamente si el sistema se bloquea y se reinicia?
Si es así, ¿también está disponible en Docker Compose?
docker
docker-compose
Golo Roden
fuente
fuente
Systemd
como administrador de servicios es una de las mejores soluciones para ese propósito y necesita más votos a favor.docker run --restart=always crmpicco-mysql
y me dio el error:Unable to find image 'crmpicco-mysql:latest' locally
.docker run
comando espera el nombre de una imagen que puede enumerar a través dedocker images
.Si desea que el contenedor se inicie incluso si ningún usuario ha realizado un inicio de sesión (como la VM VirtualBox que solo inicio y no quiero iniciar sesión cada vez). Estos son los pasos que realicé para Ubuntu 16.04 LTS. Como ejemplo, instalé un contenedor de base de datos de Oracle:
y agregue el siguiente contenido:
y habilitar el servicio al inicio
Para más información https://docs.docker.com/engine/admin/host_integration/
fuente
docker
comando anterior con eldocker-compose
comando, usando la-f
bandera para especificar la ubicación del archivo docker-compose:/usr/bin/docker-compose -f /path/to/docker-compose.yml up
docker-compose.yml
especifica un.env
archivo, use--project-directory /path/to
además de especificar explícitamente su archivo de composición de docker.[Unit]
directiva útil llamadaBefore=
. Especialmente al iniciar cosas como sistemas de administración de bases de datos, podría ser útil asegurarse de que se inicie antes que otros servicios específicos.La política de reinicio predeterminada es
no
.Para los contenedores creados, utilice
docker update
para actualizar la política de reinicio.0576df221c0b
es el ID del contenedor.fuente
always
significa que el contenedor se reiniciará incluso si lo detengo? Seguramente hay una manera de reiniciar un contenedor al reiniciar sin este tipo de inicio persistente ...If you manually stop a container, its restart policy is ignored until the Docker daemon restarts or the container is manually restarted. This is another attempt to prevent a restart loop.
Puede utilizar
docker update --restart=on-failure <container ID or name>
.Además de lo que sugiere el nombre,
on-failure
no solo reiniciará el contenedor en caso de falla, sino también al iniciar el sistema.Según la documentación , hay varias opciones de reinicio:
fuente
Modo más "suave" de la documentación:
fuente
1) En primer lugar, debe habilitar el servicio Docker en el arranque
2) Luego, si tiene docker-compose .yml file add
restart: always
o si tiene un contenedor docker, agregue restart = siempre así:docker run --restart=always
y ejecuta el contenedor dockerAsegurarse
consulte esta política de reinicio en la página oficial de Docker
3) Si desea iniciar docker-compose, todos los servicios se ejecutan cuando reinicia su sistema, por lo que ejecuta el siguiente comando solo una vez
fuente
Para esto es crontab:
Acceda a su crontab de usuario
crontab -e
o muéstrelo concrontab -l
o edite el crontab de su sistema en/etc/crontab
fuente
Puede ejecutar un contenedor que se reinicia siempre mediante:
Si desea cambiar la configuración de un contenedor en ejecución, debe actualizarlo de la siguiente manera:
Y si desea ver la política actual del contenedor, ejecute el siguiente comando antes de arriba en el primer lugar:
Después de todo, no olvide hacer que el demonio docker instalado se habilite en el arranque del sistema mediante:
Para ver una lista completa de las políticas de reinicio, consulte: Políticas de reinicio
fuente
Quería lograr el inicio del contenedor en el arranque en Windows.
Por lo tanto, acabo de crear una tarea programada que se inicia al arrancar el sistema. Esa tarea simplemente inicia "Docker para Windows.exe" (o cualquiera que sea el nombre de su ejecutable de Docker).
Luego, se iniciarán todos los contenedores con una política de reinicio de "siempre".
fuente