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 run
non 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
.