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

16

A docker-compose run reference afirma que possui a opção --rm para

Remove container after run.

Eu quero tornar este um comportamento run padrão para alguns serviços que eu 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 pseudônimos bash, Luke!" : É claro que eu posso forçar isso fora de docker-compose.yml definindo 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 extrínseca.)

    
por Ivan Kolmychek 19.01.2016 / 14:03

2 respostas

1

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

Eu quero dar uma resposta atualizada a esta pergunta porque são quase 3 anos depois. Isso irá proteger os outros de alguma pesquisa por conta própria.

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

docker-compose down

que faz o seguinte:

Stops containers and removes containers, networks, volumes, and images created by up.

By default, the only things removed are:

- 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

Networks and volumes defined as external are never removed.

Embora não seja possível declará-lo em docker-compose.yml , você poderá evitar problemas; especialmente com volumes e redes.

docker-compose run --rm

--rm - Remove container after run. Ignored in detached mode.

Runs a one-time command against a service. For example, the following command starts the web service and runs bash as its command.

docker-compose run web bash

[...] the command passed by run overrides the command defined in the service configuration.

[...] the command does not create any of the ports specified in the service configuration. This prevents port collisions with already-open ports. If you do want the service’s ports to be created and mapped to the host, specify the --service-ports flag

docker-compose rm -f

-f, --force Don't ask to confirm removal

    
por 23.11.2018 / 10:06
8

Não faz parte da especificação Dockerfile ou docker-compose.yml , é 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ê tiver alguma ferramenta de compilação para o seu projeto, geralmente é melhor agrupar as tarefas de compor com o Docker. Por exemplo, nossos projetos gradle fornecem tarefas relacionadas à janela de encaixe que definem algumas opções padrão, como --rm , para executar tarefas.

    
por 19.01.2016 / 15:05