Jak wspomniano w docker-compose run
(2015)
Polecenie przekazane przez polecenie run zastępuje polecenie zdefiniowane w konfiguracji usługi .
Na przykład, jeśli konfiguracja usługi sieci Web została uruchomiona z bash
, docker-compose run web python app.py
zastępuje ją za pomocą python app.py
.
Druga różnica polega na tym, że docker-compose run
polecenie nie tworzy żadnego z portów określonych w konfiguracji usługi .
Zapobiega to kolizjom portów z już otwartymi portami. Jeśli chcesz, aby porty usługi zostały utworzone i zmapowane do hosta, określ flagę --service-ports:
$ docker-compose run --service-ports web python manage.py shell
Więc jeśli nie masz tych konkretnych potrzeb (przesłonięcie polecenia lub uruchomienie tylko jednego kontenera na różnych portach), docker-compose up
(nawet dla jednego kontenera) wystarczy.
Czy możesz pomóc wyjaśnić, dlaczego lub kiedy nie chcesz, aby porty były tworzone? Dlatego lub kiedy mogą one kolidować z już otwartymi portami
Po prostu dlatego, że docker-compose run
jest stworzony do uruchamiania jednorazowych poleceń dla twoich usług.
Oznacza to, że jeśli już to zrobiłeś docker-compose up
, wszystkie twoje kontenery działają już na określonych portach z docker-compose.yml
.
Wykonanie docker-compose run
na tym etapie (w celu wykonania jednorazowego polecenia), gdyby dotyczyło tego samego portu, natychmiast się nie powiedzie. Stąd domyślne nietworzenie tych portów.
Inny przypadek użycia (w odwołaniu do zmiennych środowiskowych Compose ):
Aby zobaczyć, jakie zmienne środowiskowe są dostępne dla usługi, uruchom docker-compose run SERVICE env
.
Najnowsza (2019+) wersja tych poleceń jest włączona docker/docker.github.io
:
docker-compose run
do wykonywania poleceń względem działającej usługi idocker-compose up
do tworzenia nowej usługi.