Wie in docker-compose run
(2015) erwähnt
Der von run übergebene Befehl überschreibt den in der Dienstkonfiguration definierten Befehl .
Wenn die Webdienstkonfiguration beispielsweise mit gestartet wird bash
, wird docker-compose run web python app.py
sie mit überschrieben python app.py
.
Der zweite Unterschied besteht darin, dass der docker-compose run
Befehl keinen der in der Dienstkonfiguration angegebenen Ports erstellt .
Dies verhindert die Portkollisionen mit bereits geöffneten Ports. Wenn Sie möchten, dass die Ports des Dienstes erstellt und dem Host zugeordnet werden, geben Sie das Flag --service-ports an:
$ docker-compose run --service-ports web python manage.py shell
Es sei denn, Sie haben diese spezifischen Anforderungen (Überschreiben eines Befehls oder Ausführen nur eines Containers an verschiedenen Ports) docker-compose up
(auch für einen Container).
Können Sie erklären, warum oder wann die Ports nicht erstellt werden sollen? Das ist der Grund, warum oder wann sie möglicherweise mit bereits geöffneten Ports in Konflikt stehen
Einfach, weil docker-compose run
einmalige Befehle für Ihre Dienste ausgeführt werden sollen.
Das heißt, wenn Sie bereits eine ausgeführt haben docker-compose up
, werden alle Ihre Container bereits auf den angegebenen Ports von ausgeführt docker-compose.yml
.
Doing ein docker-compose run
in dieser Phase (um einen einmaligen Befehl ausführen), wenn sie den gleichen Port wurde respektiert, würde sofort scheitern. Daher die standardmäßige Nichterstellung dieser Ports.
Ein weiterer Anwendungsfall (in der Referenz zum Erstellen von Umgebungsvariablen ):
Führen Sie aus, um zu sehen, welche Umgebungsvariablen für einen Dienst verfügbar sind docker-compose run SERVICE env
.
Die neueste Version (2019+) dieser Befehle ist aktiviert für docker/docker.github.io
:
docker-compose run
diese Option grundsätzlich, um Befehle für einen laufenden Dienst auszuführen unddocker-compose up
einen neuen Dienst zu erzeugen.