2015-10-11 11 views
48

C'è un motivo per usare run per avviare un file docker-compose.yml o dovresti semplicemente usare up?Devo usare docker-compose per avviare o eseguire?

Capisco che run possa avviare un contenitore specifico, ma mi riferisco al caso in cui lo si utilizza senza specificare un contenitore in modo che avvii tutti i contenitori yml.

risposta

55

Come menzionato in docker-compose run:

Il comando passato da corsa sostituisce il comando definito nella configurazione del servizio.
Ad esempio, se la configurazione del servizio Web viene avviata con bash, quindi docker-compose run web python app.py lo sostituisce con python app.py.

La seconda differenza è il comando docker-compose runnon crea alcuna delle porte specificate nella configurazione del servizio.
Ciò impedisce le collisioni della porta con porte già aperte. Se si vogliono le porte del servizio creati e mappati per l'host, specificare il flag --service-porte:

$ docker-compose run --service-ports web python manage.py shell 

Quindi, a meno che non si dispone di tali esigenze specifiche (imperative un comando o in esecuzione un solo contenitore su diversi porte), docker-compose up (anche per un contenitore) è sufficiente.

Puoi spiegare perché o quando non desideri che vengano create le porte? Questo è il motivo o quando potrebbero entrare in conflitto con le porte già aperte

Semplicemente perché docker-compose run è fatto per eseguire i comandi una tantum per i propri servizi.
Ciò significa che, se hai già effettuato un docker-compose up, tutti i tuoi contenitori sono già in esecuzione sulle porte specificate da docker-compose.yml.
Fare uno docker-compose run in questa fase (per eseguire un comando one-off), se rispettasse la stessa porta, fallirebbe immediatamente. Da qui la non creazione di default di quelle porte.


Un altro caso d'uso (in Compose environment variables reference):

Per vedere quali variabili ambientali sono a disposizione per un servizio, gestito docker-compose run SERVICE env.

9

vorrei far notare che se si sta utilizzando Python con il debugger PPB:

import pdb; pdb.set_trace() 

che non cada alla shell se si esegue lo script utilizzando:

docker-compose up 

Tuttavia, se si utilizza esegue, si scenderà al debugger come previsto:

docker-compose run