docker: ¿cómo deshabilita el reinicio automático en un contenedor?

156

Puedo habilitar el reinicio automático con --restart=always, pero después de detener el contenedor, ¿cómo apago ese atributo?

Normalmente ejecuto un servidor web y normalmente mapeo el puerto 80:

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

Pero hay momentos en que quiero ejecutar una versión más nueva de mi imagen, pero quiero mantener el viejo contenedor. El problema es que si hay varios contenedores con --restart=always, solo se inicia uno de ellos (¿aleatorio?) Porque todos compiten por el puerto 80 en el host.

Brad Grissom
fuente

Respuestas:

326

Puede usar la --restart=unless-stoppedopción, como se menciona en @Shibashis, o actualizar la política de reinicio (esto requiere docker 1.11 o más reciente);

Consulte la documentacióndocker update y las políticas de reinicio de Docker .

docker update --restart=no my-container

que actualiza la política de reinicio para un contenedor existente ( my-container)

thaJeztah
fuente
69
Úselo docker update --restart=no $(docker ps -a -q)para actualizar todos sus contenedores :-)
Mark Mooibroek
33

Puede comenzar su contenedor con --restart=unless-stopped.

Shibashis
fuente
22

Use lo siguiente para deshabilitar TODOS los contenedores de reinicio automático (daemon).

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

Use lo siguiente para deshabilitar reiniciar un solo contenedor.

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

Racional :

Docker proporciona políticas de reinicio para controlar si sus contenedores se inician automáticamente cuando salen o cuando Docker se reinicia. Esto suele ser muy útil cuando Docker ejecuta un servicio clave.

Notas

Si está utilizando docker-compose, puede ser útil saberlo.

reiniciar no es la política de reinicio predeterminada y no reinicia un contenedor bajo ninguna circunstancia. Cuando siempre se especifica, el contenedor siempre se reinicia. La política de falla reinicia un contenedor si el código de salida indica un error de falla.

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

restart: always
FlyingV
fuente
12

Si tiene un enjambre reiniciando los contenedores, el enjambre reiniciará cualquier contenedor que detenga o rm, independientemente de la opción de reinicio. Esa es una característica, no un error.

Asegúrese de no ejecutar un servicio que olvidó:

docker service ls

Entonces, puedes detener el servicio

docker service rm <service id discovered with previous command>
nachbar
fuente
1
lsda como resultado un errorError 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