Cómo funciona la política "reiniciar: siempre" en docker-compose?

Tengo un archivo docker compose con PostgreSQL y mi aplicación, como este:

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 restart: always la 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, aunque el El código de salida es 137. Observo el mismo comportamiento cuando uso restart: on-failure directiva. Versiones 2 y 3 de docker-compose se comportan de la misma manera. Mi sistema es Ubuntu Server 16.04 x64.

Mis preguntas son:

  1. Por qué docker-compose no reinicia el contenedor bloqueado (eliminado)?
  2. ¿Cómo comprobar si la política de reinicio funciona?

Cuando usa 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 se reinicia el demonio de Docker o el contenedor se reinicia manualmente. Este es otro intento de evitar un bucle 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 de docker, reiniciar su servidor, usar un CMD dentro de un contenedor y ejecutar una salida...

Por ejemplo, si elimino mi contenedor implementado 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 cerrado:

[root@andromeda ~]# docker ps --allCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES819d1264c30a        redis:alpine        "docker-entrypoint..."   3 minutes ago       Exited (137) 34 seconds ago                       keepalive_redis_1

Pero si reinicio el demonio...

[root@andromeda ~]# docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES819d1264c30a        redis:alpine        "docker-entrypoint..."   30 minutes ago      Up 2 seconds        6379/tcp            keepalive_redis_1

El contenedor que se configuró con la política de reinicio, se inicia 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 reiniciar bucles, si lo matas, realmente quieres matarlo.

Encontré valiosos los siguientes enlaces que muestran el mismo comportamiento en diferentes versiones (por lo que no es un error, sino el comportamiento esperado):

Estuve allí muchas veces, pero como puede ver, la documentación no es sólida y no hay una explicación de cómo funciona esta función, por eso hice una pregunta: me gustaría ver la respuesta de alguien con experiencia práctica en este campo.

Compose specification | Docker Documentation & Compose specification | Docker Documentation