Tengo docker componer archivo con PostgreSQL y mi aplicación, así:
version: '3'
services:
postgresql:
image: postgres:9.6.6
ports:
- 9932:5432
expose:
- "5432"
environment:
- POSTGRES_PASSWORD=pass
restart: always
volumes:
- /data:/var/lib/postgresql/data
myapp:
image: myapp
links:
- postgresql
depends_on:
- "postgresql"
restart: always
ports:
- "5000:5000"
El problema es que la restart: always
política no parece funcionar cuando elimino el contenedor (simulando el bloqueo de la aplicación usando docker kill
) y docker-compose no reinicia mi contenedor, a pesar de que el código de salida es 137 . Observo el mismo comportamiento cuando uso la restart: on-failure
política. Las versiones 2
y 3
de docker-compose se comportan igual. Mi sistema es Ubuntu Server 16.04 x64.
Mis preguntas son:
- ¿Por qué docker-compose no reinicia el contenedor estrellado?
- ¿Cómo verificar si la política de reinicio funciona?
docker
docker-compose
Marcin Zablocki
fuente
fuente
Respuestas:
Cuando utiliza docker kill, este es el comportamiento esperado ya que Docker no reinicia el contenedor: "Si detiene manualmente un contenedor, su política de reinicio se ignora hasta que el demonio Docker se reinicie o el contenedor se reinicie manualmente. Este es otro intento de evitar un ciclo de reinicio " (referencia)
Si usa docker stop o docker kill, está deteniendo manualmente el contenedor. Puede hacer algunas pruebas sobre las políticas de reinicio: reiniciar el demonio docker, reiniciar su servidor, usar un CMD dentro de un contenedor y ejecutar una salida ...
Por ejemplo, si elimino mi contenedor desplegado con una política de reinicio, veo que salió con el código 137 pero no se reinicia de acuerdo con docker ps -a, permanece salido:
Pero si reinicio el demonio ...
El contenedor que se configuró con la política de reinicio comienza de nuevo, que es lo que dice la documentación, por lo que Docker kill no es la forma en que debe probar la política de reinicio, ya que se supone que ha detenido deliberadamente el contenedor y Docker quiere tener una forma de evitar el reinicio bucles, si lo matas, realmente quieres matarlo.
Encontré los siguientes enlaces valiosos que muestran el mismo comportamiento en diferentes versiones (por lo que no es un error sino el comportamiento esperado):
fuente