Mam kontener dokera z zainstalowanym i skonfigurowanym oprogramowaniem.
Nie ma żadnego programu, który powinien być uruchamiany / uruchamiany przez cały czas.
Co chcę - jego zdolność do uruchamiania niektórych poleceń w zależności od zdarzeń zewnętrznych. lubić:
docker exec mysupercont /path/to/mycommand -bla -for
i
docker exec mysupercont /path/to/myothercommand
Ale „exec” jest niemożliwe, gdy kontener jest zatrzymany, a także w tym kontenerze znajdują się pewne „działające” dane, które były używane dla tych poleceń, więc nie mogę
docker run ...
za każdym razem, ponieważ odtwarza pojemnik z obrazu i niszczy moje dane.
Jaki jest „właściwy” i „najlepszy” sposób na utrzymanie takiego kontenera w ruchu? Które polecenie mogę uruchomić w środku?
docker run -d --name=name container tail -f /dev/null
Odpowiedzi:
Nie musisz wykonywać za każdym razem
docker run
.docker run
jest właściwie sekwencją dwóch poleceń: „utwórz” i „uruchom”.Po uruchomieniu kontenera musisz określić „
-it
”:Przykład:
Po zakończeniu pracy polecenie określone podczas uruchamiania (w moim przykładzie bash). Na przykład wykonujesz „wyjście”. Zatrzymuje się pojemnik:
Teraz możesz zacząć od nowa
Kontener jest uruchamiany i ponownie wykonuje polecenie „bash”.
Połącz się z tą sesją „bash” za pomocą polecenia
Podsumowując : musisz zrozumieć różnicę między pojemnikiem
run
astart
pojemnikiem.Poza tym poszukaj w dokumentacji roli parametrów „
-i t
” i „-d
” dla „Uruchom”źródło
docker attach ID
. Wyjdź z tej sesji bez końca bash, możesz użyćCTRL-p CTRL-q
Cała sprawa, czy można uruchomić zatrzymany kontener, zależy od tego, jak kontener został pierwotnie utworzony, tj. Uruchomić. Jeśli uruchomiłeś polecenie, które się zakończyło lub wyjdziesz z polecenia interaktywnego, np. Bash, nie możesz uruchomić, zrestartować ani wykonać zatrzymanego kontenera. Wszystko, co możesz zrobić, to usunąć. To śmieci.
Ale ostatni komentarz taranaki, użycie „-itd”, wydaje się być tym, co zamówił doker.
Kontener działa, a Ty możesz wykonać cokolwiek zechcesz, możesz zatrzymać, uruchomić lub zrestartować kontener. Oczywiście jest to tylko wstępne ustalenie oparte na alpejskim obrazie. Uwaga: jeśli podłączysz się do kontenera, zatrzyma się on po wyjściu, ale możesz go uruchomić ponownie.
źródło
Ponieważ wspomniałeś o okresowych zadaniach i prawdopodobnie używasz czegoś takiego jak cron ze względu na sposób, w jaki chcesz używać
docker exec
, mam dla ciebie tylko lekarstwo. Przynajmniej skończyłem robić coś takiego.Plik Docker
Uruchom ze zwykłym
docker run -d ....
(użyłemdocker-compose
)Skonfiguruj plik crontab hostów, na przykład:
Uważam to rozwiązanie za przyjemne, ponieważ możemy polegać na starożytnym i sprawdzonym crontabie w dość domyślnym środowisku Linux, podczas gdy Docker obsługuje bardziej egzotyczne zależności logiki biznesowej i zmienne środowiskowe. Możesz także ustawić pewne limity, jeśli zadania okresowe utkną i będą miały wycieki pamięci lub cokolwiek innego.
źródło
Od czasu do czasu Tail nadal powoduje niektóre operacje na plikach.
Oto moje rozwiązanie, by spać wiecznie, bez żadnych skutków ubocznych.
Jak to działa
źródło