start - ¿Cómo reconstruir el contenedor docker en docker-compose.yml?
manual docker compose (7)
Como publicó @HarlemSquirrel, es la mejor y creo que la solución correcta.
Pero, para responder al problema específico de OP, debería ser algo como el siguiente comando, ya que no quiere recrear TODOS los servicios en el archivo
docker-compose.yml
, sino solo el
nginx
:
docker-compose up -d --force-recreate --no-deps --build nginx
Descripción de las opciones:
Options:
-d Detached mode: Run containers in the background,
print new container names. Incompatible with
--abort-on-container-exit.
--force-recreate Recreate containers even if their configuration
and image haven''t changed.
--build Build images before starting containers.
--no-deps Don''t start linked services.
Hay un alcance de servicios que se define en docker-compose.yml. Estos servicios se han iniciado. Necesito reconstruir solo uno de estos e iniciarlo sin otros servicios. Ejecuto los siguientes comandos:
docker-compose up -d # run all services
docker-compose stop nginx # stop only one. but it still running !!!
docker-compose build --no-cache nginx
docker-compose up -d --no-deps # link nginx to other services
Al final obtuve el viejo contenedor nginx. Por cierto, docker-compose no mata todos los contenedores en ejecución.
Con docker-compose 1.19
docker-compose up -d --force-recreate --build
Desde el menú de ayuda
Options:
-d Detached mode: Run containers in the background,
print new container names. Incompatible with
--abort-on-container-exit.
--force-recreate Recreate containers even if their configuration
and image haven''t changed.
--build Build images before starting containers.
El problema es:
$ docker-compose stop nginx
no funcionó (dijiste que todavía se está ejecutando). Si vas a reconstruirlo de todos modos, puedes intentar matarlo:
$ docker-compose kill nginx
Si aún no funciona, intente detenerlo directamente con Docker:
$ docker stop nginx
o eliminarlo
$ docker rm -f nginx
Si eso todavía no funciona, verifique su versión de Docker, es posible que desee actualizar.
Puede ser un error, puede verificar si uno coincide con su sistema / versión. Aquí hay una pareja, por ejemplo: https://github.com/docker/docker/issues/10589
https://github.com/docker/docker/issues/12738
Como solución alternativa, podría intentar matar el proceso.
$ ps aux | grep docker
$ kill 225654 # example process id
Esto debería solucionar su problema:
docker-compose ps # lists all services (id, name)
docker-compose stop <id/name> #this will stop only the selected container
docker-compose rm <id/name> # this will remove the docker container permanently
docker-compose up # builds/rebuilds all not already built container
Simplemente use:
docker-compose build [yml_service_name]
Reemplace
[yml_service_name]
con su nombre de servicio en el archivo
docker-compose.yml
.
Puede usar el
docker-compose restart
para asegurarse de que se realicen los cambios.
Puede usar
--no-cache
para ignorar el caché.
Solamente:
$ docker-compose restart [yml_service_name]
$docker-compose up -d --no-deps --build <service_name>
--no-deps - No inicie servicios vinculados.
--build - Construye imágenes antes de iniciar contenedores.