web-dev-qa-db-fra.com

docker-compose: option pour supprimer automatiquement le conteneur après exécution dans docker-compose.yml

Le docker-compose run référence indique qu'il a le --rm option pour

Retirez le récipient après l'analyse.

Je veux en faire un comportement par défaut run pour certains des services que je spécifie dans docker-compose.yml.

Donc, les questions sont :

  1. Peut-il être en quelque sorte spécifié dans docker-compose.yml?
  2. Si c'est le cas, comment faire?

( INB4 "Utilisez des alias bash, Luke!" : Bien sûr, je peux appliquer cela en dehors de docker-compose.yml en définissant un alias bash comme alias docker-compose-run='docker-compose run --rm' mais je suis intéressé par la façon dont je peux appliquer cela exactement par docker-compose.yml, pas d'une manière extrnale.)

26
Ivan Kolmychek

TLDR: C'est toujours pas possible 2018-11 ; utilisation docker-compose down ou docker-compose run --rm

Je veux donner une réponse mise à jour à cette question car c'est presque 3 ans plus tard. Cela permettra aux autres d'économiser de la recherche.

J'avais la même question et voici les solutions de contournement que j'ai trouvées (y compris celle de la question elle-même):

docker-compose down

qui fait ce qui suit:

Arrête les conteneurs et supprime les conteneurs, réseaux, volumes et images créés par up.

Par défaut, les seules choses supprimées sont:

- 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

Les réseaux et volumes définis comme externes ne sont jamais supprimés.

Bien que vous ne puissiez pas le déclarer dans docker-compose.yml cela vous évitera des tracas; surtout avec les volumes et les réseaux.

docker-compose run --rm

--rm - Retirez le conteneur après l'exécution. Ignoré en mode détaché.

Exécute une commande unique sur un service. Par exemple, la commande suivante démarre le service Web et exécute bash comme sa commande.

docker-compose run web bash

[...] la commande passée par run remplace la commande définie dans la configuration du service .

[...] la commande ne crée aucun des ports spécifié dans la configuration du service. Cela empêche les collisions de ports avec des ports déjà ouverts. Si vous souhaitez que les ports du service soient créés et mappés sur l'hôte, spécifiez le - service-ports drapeau

docker-compose rm -f

-f, --force Ne pas demander de confirmer la suppression

12
Moe Pad

Cela ne fait pas partie de Dockerfile ou docker-compose.yml spec, ce n'est qu'une option cli pour la commande run, donc la réponse est non. Vous devrez vous fier à quelque chose d'extérieur pour appliquer.

Si vous avez un outil de construction pour votre projet, il est généralement préférable d'envelopper les tâches de composition de docker avec cela. Par exemple, nos projets Gradle fournissent des tâches liées à Docker qui définissent certaines options par défaut comme --rm pour les tâches d'exécution.

8
Erik Dannenberg