run name hub dockers delete container change docker docker-compose

name - dockers container download



Cómo reiniciar un solo contenedor con docker-compose (7)

Reinicie el servicio con el archivo docker-compose

docker-compose -f [COMPOSE_FILE_NAME].yml restart [SERVICE_NAME]

Caso de uso n.º 1: si COMPOSE_FILE_NAME es docker-compose.yml y el servicio es trabajador

docker-compose restart worker

Caso de uso n.º 2: si el nombre del archivo es sample.yml y el servicio es trabajador

docker-compose -f sample.yml restart worker

De forma predeterminada, docker-compose busca docker-compose.yml si ejecutamos el comando docker-compose , de lo contrario, tenemos una bandera para dar un nombre de archivo específico con -f [FILE_NAME].yml

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

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


Reiniciar contenedor

Si solo desea reiniciar su contenedor:

docker-compose restart servicename

Piense en este comando como "simplemente reinicie el contenedor por su nombre", que es equivalente al comando docker restart .

Tenga en cuenta las advertencias:

  1. Si cambió las variables ENV, no se actualizarán en el contenedor. Debe detenerlo y comenzar de nuevo. O, utilizando un solo comando, docker-compose up detectará cambios y recreará el contenedor.

  2. Como muchos otros mencionaron, si cambió el archivo docker-compose.yml sí mismo, el reinicio simple no aplicará esos cambios.

  3. Si copia su código dentro del contenedor en la etapa de compilación (en Dockerfile usando los comandos ADD o COPY ), cada vez que cambia el código debe reconstruir el contenedor ( docker-compose build ).

Correlación a su código

docker-compose restart debería funcionar perfectamente bien, si su código obtiene la ruta asignada en el contenedor por la directiva de volumen en docker-compose.yml manera:

services: servicename: volumes: - .:/code

Pero recomendaría usar la recarga de código en vivo, que probablemente sea proporcionada por su marco de elección en el modo DEBUG (alternativamente, puede buscar paquetes de recarga automática en el idioma de su elección). Agregar esto debería eliminar la necesidad de reiniciar el contenedor cada vez que cambie el código, en lugar de volver a cargar el proceso dentro.


El simple comando ''docker'' no sabe nada sobre el contenedor ''trabajador''. Use un comando como este

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


Es muy simple: usa 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

Tenga en cuenta que esto reiniciará el contenedor pero sin reconstruirlo. Si desea aplicar sus cambios y luego reiniciar, eche un vistazo a las otras respuestas.


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

Si ha actualizado su código, puede hacer la compilación y la recarga en un solo paso con:

docker-compose up --detach --build

Primero reconstruirá sus imágenes a partir de cualquier código modificado, lo que es rápido si no hay cambios ya que se reutiliza el caché. Y luego solo reemplaza los contenedores modificados. Si las imágenes descargadas son obsoletas, puede preceder el comando anterior con:

docker-compose pull

Para descargar cualquier imagen modificada primero (los contenedores no se reiniciarán hasta que ejecute un comando como el anterior). Hacer una parada inicial es innecesario.

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

docker-compose up --detach --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 incluyen por separado para la 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 --detach --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


Para reiniciar un servicio con cambios, estos son los pasos que realicé:

docker-compose stop -t 1 worker docker-compose build worker docker-compose create worker docker-compose start worker


Siguiente comando

docker-compose restart worker

simplemente DETENDRÁ e INICIARÁ el contenedor. es decir, sin cargar ningún cambio desde el 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) necesitamos eliminar y crear el contenedor (analogía similar al reinicio de la PC)

Entonces 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