wake-up-neo.com

Wie erstelle ich einen Docker-Container in docker-compose.yml neu?

Es gibt einen Leistungsumfang, der in docker-compose.yml definiert ist. Dieser Dienst wurde gestartet. Ich muss nur eines von diesen neu erstellen und es ohne andere Dienste starten. Ich führe die folgenden Befehle aus:

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

Am Ende bekam ich alten Nginx-Container. Übrigens tötet docker-compose nicht alle laufenden Container!

136
yuklia

Docker zusammenstellen

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

--no-deps - Starte keine verknüpften Dienste.

--build - Erstellt Images, bevor Container gestartet werden.

160
denov

Mit Docker-Compose 1.19

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

Aus dem Hilfemenü

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

Dies sollte Ihr Problem beheben:

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

Wie @ HarlemSquirrel gepostet hat, ist es das Beste und ich denke die richtige Lösung.

Um das OP-spezifische Problem zu beantworten, sollte es sich um den folgenden Befehl handeln, da er nicht ALLE Dienste in der docker-compose.yml -Datei neu erstellen möchte, sondern nur die nginx:

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

Optionsbeschreibung:

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

Das Problem ist:

$ docker-compose stop nginx

hat nicht funktioniert (Sie sagten, es läuft noch). Wenn Sie es trotzdem neu erstellen möchten, können Sie versuchen, es zu töten:

$ docker-compose kill nginx

Wenn es immer noch nicht funktioniert, versuchen Sie es mit Docker direkt zu stoppen:

$ docker stop nginx

oder löschen Sie es

$ docker rm -f nginx

Wenn dies immer noch nicht funktioniert, überprüfen Sie Ihre Docker-Version. Möglicherweise möchten Sie ein Upgrade durchführen.

Es könnte ein Fehler sein, Sie könnten überprüfen, ob einer mit Ihrem System/Ihrer Version übereinstimmt. Hier einige Beispiele: https://github.com/docker/docker/issues/10589

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

Als Problemumgehung können Sie versuchen, den Prozess abzubrechen.

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

Einfach benutzen:

docker-compose build [yml_service_name]

Ersetzen Sie [yml_service_name] durch Ihren Dienstnamen in der Datei docker-compose.yml. Sie können docker-compose restart verwenden, um sicherzustellen, dass die Änderungen wirksam werden. Sie können --no-cache verwenden, um den Cache zu ignorieren.

1
FarhadMohseni