Cómo reiniciar un único contenedor con docker-compose


Tengo un archivo docker-compose.yml que contiene 4 contenedores: redis, postgres, api, worker

Durante el desarrollo de worker, a menudo necesito reiniciarlo para aplicar cambios. ¿Hay alguna buena manera de reiniciar un contenedor (por ejemplo, worker) sin reiniciar los otros contenedores?

Author: giavac, 2015-07-17

5 answers

Es muy simple: Use el comando:

docker-compose restart worker

Puede establecer el tiempo de espera para detener antes de matar el contenedor (en segundos)

docker-compose restart -t 30 worker

Eso es todo !

 208
Author: bmkrio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-13 14:10:03

Las otras respuestas para reiniciar un solo nodo están en destino, docker-compose restart worker. Eso rebotará ese contenedor, pero no incluirá ningún cambio, incluso si lo reconstruiste por separado. Usted puede manualmente stop, rm, create, y start, pero hay métodos mucho más fáciles.

Si has actualizado tu código, puedes hacer la compilación y recarga en un solo paso con:

docker-compose up -d --build

Eso primero reconstruirá sus imágenes a partir de cualquier código modificado, lo cual es rápido si no hay cambios desde que se reutiliza la caché. Y luego solo reemplaza los contenedores cambiados. Si sus imágenes descargadas están obsoletas, puede preceder el comando anterior con:

docker-compose pull

Para descargar primero las imágenes modificadas (los contenedores no se reiniciarán hasta que ejecute un comando como el up anterior). Hacer una parada inicial es innecesario.

Y para hacer esto solo para un solo servicio, siga el comando up or pull con los servicios que desea especificar, por ejemplo:

docker-compose up -d --build worker

Aquí hay un ejemplo rápido de la primera opción, el Dockerfile está estructurado para mantener las partes del código que cambian con frecuencia cerca del final. De hecho, los requisitos se extraen por separado para pip install ya que ese archivo rara vez cambia. Y como los contenedores nginx y redis estaban actualizados, no se reiniciaron. El tiempo total para todo el proceso fue inferior a 6 segundos:

$ time docker-compose -f docker-compose.nginx-proxy.yml up -d --build
Building counter
Step 1 : FROM python:2.7-alpine
 ---> fc479af56697
Step 2 : WORKDIR /app
 ---> Using cache
 ---> d04d0d6d98f1
Step 3 : ADD requirements.txt /app/requirements.txt
 ---> Using cache
 ---> 9c4e311f3f0c
Step 4 : RUN pip install -r requirements.txt
 ---> Using cache
 ---> 85b878795479
Step 5 : ADD . /app
 ---> 63e3d4e6b539
Removing intermediate container 9af53c35d8fe
Step 6 : EXPOSE 80
 ---> Running in a5b3d3f80cd4
 ---> 4ce3750610a9
Removing intermediate container a5b3d3f80cd4
Step 7 : CMD gunicorn app:app -b 0.0.0.0:80 --log-file - --access-logfile - --workers 4 --keep-alive 0
 ---> Running in 0d69957bda4c
 ---> d41ff1635cb7
Removing intermediate container 0d69957bda4c
Successfully built d41ff1635cb7
counter_nginx_1 is up-to-date
counter_redis_1 is up-to-date
Recreating counter_counter_1

real    0m5.959s
user    0m0.508s
sys     0m0.076s
 85
Author: BMitch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-19 18:08:35

Para reiniciar un servicio con cambios aquí están los pasos que realicé:

docker-compose stop -t 1 worker
docker-compose build worker
docker-compose create worker
docker-compose start worker
 14
Author: Jeff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-14 21:43:24

El comando simple 'docker' no sabe nada sobre el contenedor 'worker'. Usar comando como este

docker-compose -f docker-compose.yml restart worker

 5
Author: Shtlzut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-26 13:57:36

Siguiendo el comando

docker-compose restart worker

Simplemente se DETENDRÁ y ARRANCARÁ el contenedor. es decir, sin cargar ningún cambio desde docker-compose.xml

STOP es similar a hibernar en PC . Por lo tanto, stop / start no buscará ningún cambio realizado en el archivo de configuración . Para recargar desde la receta del contenedor (docker-compose.xml) tenemos que eliminar y crear el contenedor (Analogía similar a reiniciar el PC )

Así que los comandos serán los siguientes

docker-compose stop worker       // go to hibernate
docker-compose rm worker        // shutdown the PC 
docker-compose create worker     // create the container from image and put it in hibernate

docker-compose start worker //bring container to life from hibernation
 2
Author: Mr Coder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-10-03 11:57:42