docker - jak wyłączyć automatyczne ponowne uruchamianie na kontenerze?

156

Mogę włączyć automatyczne ponowne uruchamianie za pomocą --restart=always, ale po zatrzymaniu kontenera, jak wyłączyć ten atrybut?

Zwykle korzystam z serwera WWW i zazwyczaj mapuję port 80:

docker run -d --restart=always -p 80:80 -i -t myuser/myproj /bin/bash

Ale są chwile, kiedy chcę uruchomić nowszą wersję mojego obrazu, ale chcę zachować stary kontener. Problem polega na tym, że jeśli istnieje wiele kontenerów --restart=always, tylko jeden z nich (losowo?) Uruchamia się, ponieważ wszystkie rywalizują o port 80 na hoście.

Brad Grissom
źródło

Odpowiedzi:

326

Możesz skorzystać z --restart=unless-stoppedopcji, jak wspomniał @Shibashis, lub zaktualizować zasady ponownego uruchamiania (wymaga to docker 1.11 lub nowszej);

Zobacz dokumentacjędocker update i zasady ponownego uruchamiania platformy Docker .

docker update --restart=no my-container

która aktualizuje zasady ponownego uruchamiania dla istniejącego kontenera ( my-container)

thaJeztah
źródło
69
Użyj, docker update --restart=no $(docker ps -a -q)aby zaktualizować wszystkie swoje kontenery :-)
Mark Mooibroek,
33

Możesz rozpocząć swój kontener od --restart=unless-stopped.

Shibashis
źródło
22

Użyj poniższego, aby wyłączyć WSZYSTKIE kontenery automatycznie restartujące się (demon).

docker update --restart=no $(docker ps -a -q)

Użyj poniższego, aby wyłączyć ponowne uruchamianie POJEDYNCZEGO kontenera.

docker update --restart=no the-container-you-want-to-disable-restart

Racjonalne :

Docker zapewnia zasady ponownego uruchamiania, aby kontrolować, czy kontenery są uruchamiane automatycznie po zamknięciu lub po ponownym uruchomieniu platformy Docker. Jest to często bardzo przydatne, gdy Docker uruchamia usługę klucza.

Uwagi

Jeśli używasz docker-compose, warto to wiedzieć.

restart no jest domyślną zasadą ponownego uruchamiania i nie powoduje ponownego uruchomienia kontenera w żadnych okolicznościach. Jeśli określono wartość always, kontener jest zawsze uruchamiany ponownie. Zasada awarii powoduje ponowne uruchomienie kontenera, jeśli kod zakończenia wskazuje na błąd w przypadku awarii.

restart: "no"
restart: always
restart: on-failure
restart: unless-stopped

restart: always
FlyingV
źródło
12

Jeśli masz rój ponownie uruchamiający kontenery, rój zrestartuje wszystkie kontenery, które zatrzymasz lub rm, niezależnie od opcji restartu. To jest funkcja, a nie błąd.

Upewnij się, że nie korzystasz z usługi, o której zapomniałeś:

docker service ls

Następnie możesz zatrzymać usługę

docker service rm <service id discovered with previous command>
nachbar
źródło
1
lspowoduje błądError response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.
naXa