Czy powinienem używać docker-compose up Czy run?

Czy jest powód, aby użyć run do uruchomienia pliku docker-compose.yml Czy po prostu należy użyć up?

Rozumiem, że run może uruchomić konkretny kontener, ale mam na myśli przypadek, w którym używasz go bez podawania kontenera, aby uruchomić wszystkie kontenery yml.

Author: andrey, 2015-10-11

3 answers

Jak wspomniano w docker-compose run (2015)

Polecenie przekazane przez run nadpisuje polecenie zdefiniowane w konfiguracji usługi .
Na przykład, jeśli konfiguracja usługi webowej jest uruchamiana przez bash, to docker-compose run web python app.py nadpisuje ją przez python app.py.

Druga różnica polega na tym, że polecenie docker-compose run nie tworzy żadnego z portów określonych w konfiguracji usługi .
Zapobiega to kolizji portów z już otwartymi portami. Jeśli jeśli chcesz utworzyć porty usługi i zmapować je do hosta, podaj flagę --service-ports:

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

Więc jeśli nie masz tych specyficznych potrzeb (nadpisanie polecenia lub uruchomienie tylko jednego kontenera na różnych portach), docker-compose up (nawet dla jednego kontenera) wystarczy.

Czy możesz wyjaśnić dlaczego lub kiedy nie chcesz, aby porty zostały utworzone? Dlatego też, lub kiedy mogą one kolidować z już otwartymi portami

Po prostu dlatego, że docker-compose run jest stworzony do działania polecenia jednorazowe dla Twoich usług.
Oznacza to, że jeśli wykonałeś już docker-compose up, wszystkie Twoje kontenery są już uruchomione na swoich 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 by się nie powiodło. Stąd domyślne nie-tworzenie tych portów.


Inny przypadek użycia (w Skomponuj odniesienie do zmiennych środowiskowych):

Aby zobaczyć, jakie są zmienne środowiskowe dostępne dla usługi, Uruchom docker-compose run SERVICE env.


Najnowsza (2019+) Wersja tych poleceń jest włączona docker/docker.github.io:

 148
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-14 18:24:02

Chciałbym zwrócić uwagę, że jeśli używasz Pythona z debuggerem pdb:

import pdb; pdb.set_trace()

Nie spadnie do powłoki, jeśli wykonasz skrypt używając:

docker-compose up

Jednakże, jeśli użyjesz run, zostanie on wyświetlony w dół do debuggera zgodnie z oczekiwaniami:

docker-compose run
 29
Author: quickinsights,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-09 01:52:01

Jest Odpowiedź z docker docs .

Zazwyczaj chcesz docker-compose up. Użyj up, aby uruchomić lub ponownie uruchomić wszystkie usługi określone w docker-compose.yml. W domyślnym tryb "dołączony", widzisz wszystkie dzienniki ze wszystkich kontenerów. W tryb " wolnostojący "(-d), komponuje wyjścia po uruchomieniu kontenerów, ale kontenery nadal działają w tle.

Komenda docker-compose run służy do uruchamiania "jednorazowego "lub" adhoc" zadania. Wymaga nazwy usługi ty chcesz biegać i dopiero zaczynasz kontenery dla usług, od których zależy uruchomiona usługa. Użycie run aby uruchomić testy lub wykonać zadanie administracyjne, takie jak usunięcie lub dodawanie danych do kontenera objętości danych. Polecenie run działa jak docker run -ti w tym, że otwiera interaktywny terminal do kontenera i zwraca status wyjścia odpowiadający statusowi wyjścia proces w pojemniku.

 12
Author: Jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-14 18:07:04