docker-compose: opzione per rimuovere automaticamente il container dopo l'esecuzione in docker-compose.yml


24

Il docker-compose runriferimento afferma che ha l' --rmopzione per

Rimuovere il contenitore dopo l'esecuzione.

Voglio renderlo un runcomportamento predefinito per alcuni dei servizi in cui specifico docker-compose.yml.

Quindi, le domande sono :

  1. Può in qualche modo essere specificato in docker-compose.yml?
  2. Se può, come posso farlo?

( INB4 "Usa alias bash, Luke!" : Certo che posso farcela al di fuori docker-compose.ymlimpostando alcuni alias bash come alias docker-compose-run='docker-compose run --rm'ma sono interessato a come posso applicarlo esattamente attraverso docker-compose.yml, non in modo estraneo.)

Risposte:


10

TLDR: non è ancora possibile 2018-11 ; usare docker-compose downodocker-compose run --rm

Voglio dare una risposta aggiornata a questa domanda perché è quasi 3 anni dopo. Ciò salverà gli altri un po 'di ricerca.

Ho avuto la stessa domanda e qui ci sono le soluzioni alternative che ho trovato (incluso quello della domanda stessa):

docker-compose down

che fa quanto segue:

Arresta i contenitori e rimuove i contenitori, le reti, i volumi e le immagini create da up.

Per impostazione predefinita, le uniche cose rimosse sono:

- 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

Reti e volumi definiti come esterni non vengono mai rimossi.

Anche se non puoi dichiararlo, docker-compose.ymlti salverà qualche seccatura; soprattutto con volumi e reti.

docker-compose run --rm

--rm - Rimuove il contenitore dopo l'esecuzione. Ignorato in modalità staccata.

Esegue un comando singolo su un servizio. Ad esempio, il comando seguente avvia il servizio Web ed esegue bash come comando.

docker-compose run web bash

[...] il comando passato da run ha la precedenza sul comando definito nella configurazione del servizio .

[...] il comando non crea nessuna delle porte specificate nella configurazione del servizio. Questo impedisce collisioni di porte con porte già aperte. Se vuoi che le porte del servizio vengano create e mappate sull'host, specifica il flag --service-doors

docker-compose rm -f

-f, --force Non chiedere di confermare la rimozione


8

Non fa parte delle specifiche Dockerfileo docker-compose.yml, è solo un'opzione cli per il comando run, quindi la risposta è no. Dovrai fare affidamento su qualcosa di esterno per far rispettare.

Se disponi di uno strumento di compilazione per il tuo progetto, in genere è meglio racchiuderlo in attività di composizione docker. Ad esempio, i nostri progetti Gradle forniscono attività correlate alla finestra mobile che impostano alcune opzioni predefinite come --rmper le attività di esecuzione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.