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.
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 przezbash
, todocker-compose run web python app.py
nadpisuje ją przezpython 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
:
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
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żyjup
, aby uruchomić lub ponownie uruchomić wszystkie usługi określone wdocker-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życierun
aby uruchomić testy lub wykonać zadanie administracyjne, takie jak usunięcie lub dodawanie danych do kontenera objętości danych. Polecenierun
działa jakdocker run -ti
w tym, że otwiera interaktywny terminal do kontenera i zwraca status wyjścia odpowiadający statusowi wyjścia proces w pojemniku.
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