Przypuśćmy, że mam kontener Docker, który chcę uruchomić, i mogę zadzwonić
$ docker run ...
i wszystko w porządku. Czy istnieje wbudowany sposób uruchamiania kontenera w taki sposób, aby był on automatycznie restartowany, jeśli system ulegnie awarii i uruchomi się ponownie?
Jeśli tak, czy jest to również dostępne w Docker Compose?
docker
docker-compose
Golo Roden
źródło
źródło
Systemd
jako menedżera usług jest jednym z najlepszych rozwiązań do tego celu i wymaga więcej głosów.docker run --restart=always crmpicco-mysql
i mam błąd:Unable to find image 'crmpicco-mysql:latest' locally
.docker run
Komenda spodziewa nazwę obrazu, który możesz wymienić poprzezdocker images
.Jeśli chcesz, aby kontener był uruchamiany, nawet jeśli żaden użytkownik nie wykonał logowania (jak maszyna wirtualna VirtualBox, którą tylko uruchamiam i nie chcę się logować za każdym razem). Oto kroki, które wykonałem dla Ubuntu 16.04 LTS. Jako przykład zainstalowałem kontener db oracle:
i dodaj następującą treść:
i włącz usługę podczas uruchamiania
Więcej informacji: https://docs.docker.com/engine/admin/host_integration/
źródło
docker
powyższe polecenie nadocker-compose
polecenie, używając-f
flagi do określenia lokalizacji pliku/usr/bin/docker-compose -f /path/to/docker-compose.yml up
docker-compose.yml
określa.env
plik, użyj--project-directory /path/to
oprócz jawnego określenia pliku redagowania docker.[Unit]
dyrektywa o nazwieBefore=
. Szczególnie przy uruchamianiu takich rzeczy, jak systemy zarządzania bazami danych, pomocne może być upewnienie się, że zostało uruchomione przed określonymi innymi usługami.Domyślna polityka restart jest
no
.W przypadku utworzonych kontenerów użyj
docker update
do aktualizacji zasad ponownego uruchamiania.0576df221c0b
to identyfikator kontenera.źródło
always
oznacza to, że pojemnik zostanie ponownie uruchomiony, nawet jeśli ja go zatrzymać? Z pewnością istnieje sposób na ponowne uruchomienie kontenera po ponownym uruchomieniu bez tego rodzaju ciągłego uruchamiania ...If you manually stop a container, its restart policy is ignored until the Docker daemon restarts or the container is manually restarted. This is another attempt to prevent a restart loop.
Możesz użyć
docker update --restart=on-failure <container ID or name>
.Oprócz tego, co sugeruje nazwa,
on-failure
nie tylko zrestartuje kontener w przypadku awarii, ale także podczas rozruchu systemu.Zgodnie z dokumentacją istnieje wiele opcji ponownego uruchomienia:
źródło
1) Przede wszystkim musisz włączyć usługę docker podczas rozruchu
2) Następnie, jeśli masz docker-compose .yml file add
restart: always
lub jeśli masz docker container add restart = zawsze w ten sposób:docker run --restart=always
i uruchom kontener DockerUpewnić się
zobacz te zasady ponownego uruchamiania na oficjalnej stronie Dockera
3) Jeśli chcesz uruchomić docker-compose, wszystkie usługi działają po ponownym uruchomieniu systemu, więc uruchamiasz poniższe polecenie tylko raz
źródło
Bardziej „delikatny” tryb z dokumentacji:
źródło
restart=unless-stopped
Opcja będzie próbował rozpocząć pojemników, gdy silnik doker zostaje wznowiona. Wyjątkami, które widziałem, są sytuacje, gdy sam silnik dokera nie jest skonfigurowany do automatycznego uruchamiania po ponownym uruchomieniu (sprawdź,systemctl status docker
czy jest włączony) i silnik uruchamia kontenery, zanim sieć jest gotowa, co widziałem tylko w przypadku sieci nakładkowej. Oba też by się zepsułyrestart=always
.Do tego służy crontab:
Uzyskaj dostęp do pliku crontab użytkownika,
crontab -e
wyświetl go za pomocącrontab -l
lub edytuj tabelę crontab systemu pod adresem/etc/crontab
źródło
Chciałem uzyskać uruchomienie kontenera podczas rozruchu w systemie Windows.
Dlatego właśnie utworzyłem zaplanowane zadanie, które uruchamia się podczas rozruchu systemu. To zadanie po prostu uruchamia „Docker for Windows.exe” (lub inną nazwę pliku wykonywalnego Dockera).
Następnie zostaną uruchomione wszystkie kontenery z zasadą ponownego uruchamiania „zawsze”.
źródło
Możesz uruchomić kontener, który zawsze restartuje się przez:
Jeśli chcesz zmienić konfiguracje działającego kontenera, powinieneś zaktualizować go przez:
A jeśli chcesz zobaczyć aktualną politykę kontenera, uruchom następujące polecenie przed powyższym w pierwszej kolejności:
W końcu nie zapomnij włączyć zainstalowanego demona Dockera podczas rozruchu systemu przez:
Aby zobaczyć pełną listę zasad ponownego uruchamiania, zobacz: Zasady ponownego uruchamiania
źródło
Mam podobny problem z systemami Linux. Po uruchomieniu systemu kontener z zasadą restartu „chyba, że zatrzymano”, nie uruchomiłby się automatycznie, chyba że wpisałem polecenie używające dockera w jakiś sposób, na przykład „docker ps”. Byłem zaskoczony, ponieważ spodziewałem się, że to polecenie poda tylko informacje o stanie. Następnie wypróbowałem polecenie „systemctl status docker”. W systemie, w którym nie zostały uruchomione żadne polecenia Dockera, polecenie to zgłosiło następujące informacje:
W systemie, w którym „docker ps” został uruchomiony bez innych poleceń Dockera, otrzymałem następujące informacje:
Najbardziej prawdopodobnym wyjaśnieniem jest to, że Docker czeka na jakąś komendę Dockera przed pełną inicjalizacją i uruchomieniem kontenerów. Można przypuszczalnie uruchomić "docker ps" w pliku jednostki systemowej w momencie, gdy wszystkie usługi, których potrzebują twoje kontenery, zostały zainicjowane. Przetestowałem to, umieszczając plik o nazwie docker-onboot.service w katalogu / lib / systemd / system z następującą zawartością:
WantedBy = multi-user.target
Do tej pory (jeden test z włączoną tą usługą) kontener uruchamiał się podczas rozruchu komputera. Nie próbowałem zależności od docker.service, ponieważ docker.service nie uruchomi się, dopóki nie zostanie uruchomione polecenie docker. Następny test będzie wykonywany z wyłączonym docker-onboot (aby sprawdzić, czy zależność WantedBy uruchomi ją automatycznie).
źródło
docker.service
się podczas rozruchu,systemctl enable docker.service
niż utworzyć całą inną usługę tylko po to, aby pośrednio wyzwolić tę usługę przez jej gniazdo.Aby uruchomić kontener i ustawić go tak, aby uruchamiał się automatycznie po ponownym uruchomieniu systemu
Gdzie
ecstatic_ritchie
jest przykładowa nazwa określająca kontener, który nas interesuje. Służydocker ps -a
do wyświetlania wszystkich nazw kontenerów.Aby określone uruchomione kontenery były uruchamiane automatycznie po ponownym uruchomieniu systemu
Aby wszystkie uruchomione kontenery były uruchamiane automatycznie po ponownym uruchomieniu systemu
Zobacz więcej na stronie głównej Dockera
źródło