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

24

A docker-compose runreferência afirma que tem a --rmopção de

Remova o recipiente após a execução.

Quero tornar esse runcomportamento padrão para alguns dos serviços especificados em docker-compose.yml.

Então, as perguntas são :

  1. De alguma forma, pode ser especificado em docker-compose.yml?
  2. Se puder, como posso fazer isso?

( INB4 "Use aliases de bash, Luke!" : É claro que eu posso aplicar isso fora docker-compose.yml, definindo alguns alias de bash como, alias docker-compose-run='docker-compose run --rm'mas estou interessado em como aplicar isso exatamente docker-compose.yml, não de uma maneira extrnal.)

Ivan Kolmychek
fonte

Respostas:

10

TLDR: ainda não é possível 2018-11 ; use docker-compose downoudocker-compose run --rm

Eu quero dar uma resposta atualizada para esta pergunta, porque é quase 3 anos depois. Isso poupará a outras pessoas alguma pesquisa.

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

docker-compose down

que faz o seguinte:

Interrompe contêineres e remove contêineres, redes, volumes e imagens criados por 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 declara- docker-compose.ymllo, você terá alguns aborrecimentos; especialmente com volumes e redes.

docker-compose run --rm

--rm - Remova o recipiente após a execução. Ignorado no modo desanexado.

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 execução substitui o comando definido na configuração do serviço .

[...] o comando não cria nenhuma das portas especificadas na configuração do serviço. Isso evita colisões de portas com portas já abertas. Se você quer portos do serviço a ser criado e mapeado para o anfitrião, especifique o --service-portas flag

docker-compose rm -f

-f, --force Não peça para confirmar a remoção

Moe Pad
fonte
8

Não faz parte do Dockerfileou docker-compose.ymlspec, é apenas uma opção cli para o comando run, então a resposta é não. Você precisará confiar em algo externo para impor.

Se você possui alguma ferramenta de construção para o seu projeto, geralmente é melhor agrupar as tarefas de composição do docker com isso. Por exemplo, nossos projetos gradle fornecem tarefas relacionadas ao docker que definem algumas opções padrão, como --rmpara tarefas de execução.

Erik Dannenberg
fonte