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

24

La docker-compose runréférence indique qu'elle a la --rmpossibilité de

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

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

Donc, les questions sont :

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

( INB4 "Utiliser les alias bash, Luke!" : Bien sûr, je peux appliquer cela en dehors de docker-compose.ymlen définissant des 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 à travers docker-compose.yml, pas d'une manière extrnale.)

Ivan Kolmychek
la source

Réponses:

10

TLDR: Ce n'est toujours pas possible 2018-11 ; utiliser docker-compose downoudocker-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, cela docker-compose.ymlvous é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 en tant que 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és 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 à créer et mis en correspondance avec l'hôte, spécifiez les ports --Personnel- drapeau

docker-compose rm -f

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

Moe Pad
la source
8

Cela ne fait pas partie de la spécification Dockerfileor docker-compose.yml, 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 --rmpour les tâches d'exécution.

Erik Dannenberg
la source