web-dev-qa-db-fra.com

Comment reconstruire un conteneur Docker dans Docker-compose.yml?

Il existe une étendue de services définie dans docker-compose.yml. Ces services ont été démarrés. Je n'ai besoin de reconstruire qu'un seul d'entre eux et de le démarrer sans utiliser d'autres services. Je lance les commandes suivantes:

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

À la fin, je suis un vieux conteneur Nginx. Au fait, docker-compose ne tue pas tous les conteneurs en cours d'exécution!

136
yuklia

docker-compos up

$docker-compose up -d --no-deps --build <service_name>

--no-deps - Ne démarrez pas les services liés.

--build - Construit des images avant de commencer les conteneurs.

160
denov

Avec docker-compose 1.19

docker-compose up -d --force-recreate --build

Dans le menu d'aide

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.
99
HarlemSquirrel

Cela devrait résoudre votre problème:

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 
42
ArgonQQ

Comme @HarlemSquirrel l’a signalé, c’est le meilleur et je pense la bonne solution.

Mais, pour répondre au problème spécifique de l'OP, il devrait ressembler à la commande suivante, car il ne veut pas recréer TOUS les services dans le fichier docker-compose.yml, mais uniquement le nginx:

docker-compose up -d --force-recreate --no-deps --build nginx

Description des options:

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.
29
Slavik Meltser

Le problème est:

$ docker-compose stop nginx

n'a pas fonctionné (vous avez dit qu'il fonctionne toujours). Si vous voulez quand même le reconstruire, vous pouvez essayer de le tuer:

$ docker-compose kill nginx

Si cela ne fonctionne toujours pas, essayez de l'arrêter directement avec docker:

$ docker stop nginx

ou le supprimer

$ docker rm -f nginx

Si cela ne fonctionne toujours pas, vérifiez votre version de docker, vous voudrez peut-être mettre à niveau.

Cela pourrait être un bug, vous pouvez vérifier si celui-ci correspond à votre système/version. Voici un couple, par exemple: https://github.com/docker/docker/issues/10589

https://github.com/docker/docker/issues/12738

En guise de solution de contournement, vous pouvez essayer de tuer le processus.

$ ps aux | grep docker 
$ kill 225654 # example process id
2
user2707671

Utilisez simplement:

docker-compose build [yml_service_name]

Remplacez [yml_service_name] par le nom de votre service dans le fichier docker-compose.yml. Vous pouvez utiliser docker-compose restart pour vous assurer que les modifications sont effectuées. Vous pouvez utiliser --no-cache pour ignorer le cache.

1
FarhadMohseni