Existe-t-il une raison d'utiliser run
pour démarrer un fichier docker-compose.yml
ou devez-vous simplement utiliser up
?
Je comprends que run
peut démarrer un conteneur spécifique, mais je fais référence au cas où vous l'utilisez sans spécifier de conteneur afin qu'il démarre tous vos conteneurs yml.
Comme mentionné dans docker-compose run
:
La commande passée par run remplace la commande définie dans la configuration du service .
Par exemple, si la configuration du service Web est démarrée avecbash
, alors _docker-compose run web python app.py
_ le remplace par _python app.py
_.La deuxième différence est que la commande _
docker-compose run
_ ne crée aucun des ports spécifiés dans la configuration du service .
Ceci évite les collisions de ports avec des ports déjà ouverts. Si vous souhaitez que les ports du service soient créés et mappés à l'hôte, spécifiez l'indicateur --service-ports:
_$ docker-compose run --service-ports web python manage.py Shell
_
Donc, à moins que vous n'ayez ces besoins spécifiques (remplacer une commande ou n'exécuter qu'un seul conteneur sur différents ports), _docker-compose up
_ (même pour un conteneur) est suffisant.
Pouvez-vous m'aider à expliquer pourquoi ou à quel moment vous ne souhaitez pas que les ports soient créés? C’est pourquoi ou quand ils pourraient entrer en conflit avec des ports déjà ouverts
Tout simplement parce que _docker-compose run
_ est conçu pour exécuter des commandes uniques pour vos services.
Cela signifie que si vous avez déjà effectué un _docker-compose up
_, tous vos conteneurs s'exécutent déjà sur leurs ports spécifiés à partir de _docker-compose.yml
_.
Faire un _docker-compose run
_ à ce stade (pour exécuter une commande unique), s’il respectait le même port, échouerait immédiatement. D'où la non-création par défaut de ces ports.
Autre cas d'utilisation (in référence des variables d'environnement Compose ):
Pour voir quelles variables d'environnement sont disponibles pour un service, exécutez _
docker-compose run SERVICE env
_.
J'aimerais souligner que si vous utilisez Python avec le débogueur pdb:
import pdb; pdb.set_trace()
Si vous exécutez votre script en utilisant:
docker-compose up
Cependant, si vous utilisez run, le débogueur sera redirigé comme prévu:
docker-compose run