Risposte:
Come menzionato in docker-compose run
(2015)
Il comando passato da run ha la precedenza sul comando definito nella configurazione del servizio .
Ad esempio, se la configurazione del servizio Web viene avviata conbash
, ladocker-compose run web python app.py
sovrascrive conpython app.py
.La seconda differenza è che il
docker-compose run
comando non crea nessuna delle porte specificate nella configurazione del servizio .
Ciò impedisce le collisioni delle 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 run --service-ports web python manage.py shell
Quindi, a meno che tu non abbia tali esigenze specifiche (sovrascrivendo un comando o eseguendo solo un contenitore su porte diverse), docker-compose up
(anche per un contenitore) è sufficiente.
Potete aiutarmi a spiegare perché o quando non si desidera creare le porte? Ecco perché o quando potrebbero entrare in conflitto con porte già aperte
Semplicemente perché docker-compose run
è fatto per eseguire comandi una tantum per i tuoi servizi.
Ciò significa che, se hai già fatto un docker-compose up
, tutti i tuoi contenitori sono già in esecuzione sulle porte specificate da docker-compose.yml
.
Fare un docker-compose run
a questo punto (per eseguire un comando una tantum), se rispettasse la stessa porta, fallirebbe immediatamente. Da qui la non creazione predefinita di tali porte.
Un altro caso d'uso (nel riferimento alle variabili di ambiente Compose ):
Per vedere quali variabili di ambiente sono disponibili per un servizio, eseguire
docker-compose run SERVICE env
.
La versione più recente (2019+) di questi comandi è attiva docker/docker.github.io
:
Vorrei sottolineare che se si utilizza Python con il debugger pdb:
import pdb; pdb.set_trace()
Non passerà alla shell se esegui lo script usando:
docker-compose up
Tuttavia, se si utilizza Esegui, verrà visualizzato nel debugger come previsto:
docker-compose run
C'è una risposta dai documenti docker .
In genere, vuoi
docker-compose up
. Utilizzareup
per avviare o riavviare tutti i servizi definiti in adocker-compose.yml
. Nella modalità "collegata" predefinita, vengono visualizzati tutti i registri di tutti i contenitori. In modalità "scollegata" (-d
), Compose esce dopo l'avvio dei contenitori, ma i contenitori continuano a funzionare in background.Il
docker-compose run
comando serve per eseguire attività "una tantum" o "ad hoc". Richiede il nome del servizio che si desidera eseguire e avvia i contenitori solo per i servizi da cui dipende il servizio in esecuzione. Utilizzarerun
per eseguire test o eseguire un'attività amministrativa come la rimozione o l'aggiunta di dati a un contenitore del volume di dati. Ilrun
comando agisce comedocker run -ti
se apre un terminale interattivo al contenitore e restituisce uno stato di uscita corrispondente allo stato di uscita del processo nel contenitore.
docker-compose run
per eseguire comandi su un servizio in esecuzione edocker-compose up
per generare un nuovo servizio.