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:
-
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. -
Como muchos otros mencionaron, si cambió el archivo
docker-compose.yml
sí mismo, el reinicio simple no aplicará esos cambios. -
Si copia su código dentro del contenedor en la etapa de compilación (en
Dockerfile
usando los comandosADD
oCOPY
), 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