Como funciona a Política" reiniciar: sempre " no docker-compose?

Eu tenho o arquivo docker compose com PostgreSQL e meu aplicativo, assim:

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"

O problema é que restart: always a política não parece funcionar quando eu mato o contêiner (simulando a falha do aplicativo usando docker kill) e docker-compose não reinicia meu contêiner, mesmo que o O código de saída é 137. Observo o mesmo comportamento quando uso restart: on-failure politico. Versao 2 e 3 de docker-compose se comportar da mesma forma. Meu sistema é o Ubuntu Server 16.04 x64.

Minhas perguntas são:

  1. Por que o docker-compose não reinicia o contêiner travado (morto)?
  2. Como verificar se a Política de reinicialização funciona?

Quando você usa o Docker kill, esse é o comportamento esperado, pois o Docker não reinicia o contêiner: "se você parar manualmente um contêiner, sua política de reinicialização será ignorada até que o daemon do Docker seja reiniciado ou o contêiner seja reiniciado manualmente. Esta é outra tentativa de evitar um loop de reinicialização" (referência)

Se você usar docker stop ou docker kill, você está parando manualmente o contêiner. Você pode fazer alguns testes sobre políticas de reinicialização: reiniciar o daemon do docker, reiniciar o servidor, usar um CMD dentro de um contêiner e executar uma saída...

Por exemplo, se eu matar meu contêiner implantado com uma política de reinicialização, vejo que ele saiu com o código 137, mas não foi reiniciado de acordo com o docker ps-a, ele permanece encerrado:

[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

Mas se eu reiniciar o daemon...

[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

O contêiner que foi definido com a Política de reinicialização, começa novamente, que é o que a documentação diz, então docker kill não é a maneira como você deve testar a Política de reinicialização, pois presume-se que você parou deliberadamente o contêiner e Docker quer ter uma maneira de evitar reiniciar loops, se você matá-lo, você realmente quer matá-lo.

Achei os seguintes links valiosos que mostram o mesmo comportamento em versões diferentes (por isso não é um bug, mas o comportamento esperado):

Eu estava lá muitas vezes, mas como você pode ver, a documentação não é robusta e não há explicação de como esse recurso funciona, é por isso que fiz uma pergunta - gostaria de ver a resposta de alguém com experiência prática neste campo.

Compose specification | Docker Documentation & Compose specification | Docker Documentation