docker-compose: opção para remover automaticamente o contêiner após executar no docker-compose.yml

O docker-compose run referência afirma que tem o --rm opção para

Remova o contêiner após a execução.

Quero tornar isso um padrão run comportamento para alguns dos serviços que especifico em docker-compose.yml.

Então, as perguntas são:

  1. Pode de alguma forma ser especificado em docker-compose.yml?
  2. Se puder, Como posso fazer isso?

(INB4 " Use aliases bash, Luke!": Claro que posso impor isso fora de docker-compose.yml ao definir algum alias bash como alias docker-compose-run='docker-compose run --rm' mas estou interessado em Como posso impor isso exatamente através de docker-compose.yml, não de alguma forma extrnal.)

TLDR: é ainda não é possível 2018-11; usar docker-compose down ou docker-compose run --rm

Quero dar uma resposta atualizada a esta pergunta porque é quase 3 anos depois. Isso salvará outras pessoas em busca.

Eu tinha a mesma pergunta e aqui estão as soluções alternativas que encontrei (incluindo a da própria pergunta):

docker-compose down

o que faz o seguinte:

Interrompe contêineres e remove contêineres, redes, volumes e imagens criadas pelo up.

Por padrão, as únicas coisas removidas são:

- Containers for services defined in the Compose file- Networks defined in the networks section of the Compose file- The default network, if one is used

Redes e volumes definidos como externos nunca são removidos.

Embora você não possa declará-lo em docker-compose.yml isso irá protegê - lo alguns problemas; especialmente com volumes e redes.

docker-compose run --rm

-- rm-remova o recipiente após a execução. Ignorado no modo destacado.

Executa um comando único contra um serviço. Por exemplo, o comando a seguir inicia o serviço da web e executa o bash como seu comando.

docker-compose run web bash

[...] o comando passado por run substitui o comando definido no serviço configuracao.

[...] comando não cria nenhuma das portas especificado na configuração do serviço. Isso evita colisões de portas com portas já abertas. Se você deseja que as portas do Serviço sejam criadas e mapeado para o host, especifique o -- serviço-portas bandeira

docker-compose rm -f

- F, -- força não peça para confirmar a remoção

Não faz parte do Dockerfile ou docker-compose.yml spec, é apenas uma opção cli para o comando run, então a resposta é não. Você precisará confiar em algo externo para fazer cumprir.

Se você tiver alguma ferramenta de compilação para o seu projeto, geralmente é melhor envolver as tarefas do docker-compose com isso. Por exemplo, nossos projetos gradle fornecem tarefas relacionadas ao docker que definem algumas opções padrão, como --rm para executar tarefas.