Er is een reeks services die zijn gedefinieerd in docker-compose.yml. Deze diensten zijn gestart. Ik moet slechts één hiervan opnieuw opbouwen en starten zonder andere services.
Ik voer de volgende opdrachten uit:
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
Aan het einde kreeg ik een oude nginx-container.
Trouwens, docker-compose doodt niet alle draaiende containers!
Antwoord 1, autoriteit 100%
$ docker-compose up -d --no-deps --build <service_name>
–no-deps – Start geen gekoppelde services.
–build – Bouw afbeeldingen voordat u containers start.
Antwoord 2, autoriteit 67%
Met docker-compose 1.19 up
docker-compose up --build --force-recreate --no-deps [-d] [<service_name>..]
Zonder een of meer service_name
-argumenten worden alle afbeeldingen gemaakt als ze ontbreken en worden alle containers opnieuw gemaakt.
Vanuit het helpmenu
Options:
-d, --detach Detached mode: Run containers in the background,
print new container names. Incompatible with
--abort-on-container-exit.
--no-deps Don't start linked services.
--force-recreate Recreate containers even if their configuration
and image haven't changed.
--build Build images before starting containers.
Zonder cache
Om een herbouw te forceren om gecachete lagen te negeren, moeten we eerst bouweneen nieuwe afbeelding
docker-compose build --no-cache [<service_name>..]
Vanuit het helpmenu
Options:
--force-rm Always remove intermediate containers.
-m, --memory MEM Set memory limit for the build container.
--no-cache Do not use cache when building the image.
--no-rm Do not remove intermediate containers after a successful build.
Maak vervolgens de container opnieuw
docker-compose up --force-recreate --no-deps [-d] [<service_name>..]
Antwoord 3, autoriteit 17%
Dit zou je probleem moeten oplossen:
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
Antwoord 4, autoriteit 13%
Zoals @HarlemSquirrel heeft gepost, is dit de beste en volgens mij de juiste oplossing.
Maar om het OP-specifieke probleem te beantwoorden, zou het zoiets als het volgende commando moeten zijn, omdat hij niet ALLE services in het bestand docker-compose.yml
opnieuw wil maken, maar alleen de nginx
één:
docker-compose up -d --force-recreate --no-deps --build nginx
Optiesbeschrijving:
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.
Antwoord 5, autoriteit 5%
Misschien zijn deze stappen niet helemaal correct, maar ik vind dit wel leuk:
stop docker compose: $ docker-compose down
WAARSCHUWING: De volgende prune -a
verwijdert alle afbeeldingen, u wilt dit misschien niet omdat het andere projecten kan beïnvloeden. u kunt hier
meer lezen
verwijder de container: $ docker system prune -a
start docker compose: $ docker-compose up -d
Antwoord 6, autoriteit 2%
docker-compose stop nginx # stop if running
docker-compose rm -f nginx # remove without confirmation
docker-compose build nginx # build
docker-compose up -d nginx # create and start in background
Het verwijderen van container met rm is essentieel. Zonder te verwijderen, start Docker de oude container.
Antwoord 7
Gewoon :
docker-compose build [yml_service_name]
Vervang [yml_service_name]
door uw servicenaam in het bestand docker-compose.yml
. U kunt docker-compose restart
gebruiken om ervoor te zorgen dat wijzigingen worden doorgevoerd. U kunt --no-cache
gebruiken om de cache te negeren.
Antwoord 8
Voor mij haalde het alleen nieuwe afhankelijkheden van Docker Hub met zowel --no-cache
als --pull
(die beschikbaar zijn voor docker-compose build
.
# other steps before rebuild
docker-compose build --no-cache --pull nginx # rebuild nginx
# other steps after rebuild, e.g. up (see other answers)
Antwoord 9
Het probleem is:
$ docker-compose stop nginx
werkte niet (je zei dat het nog steeds actief is). Als je het toch gaat herbouwen, kun je proberen het te doden:
$ docker-compose kill nginx
Als het nog steeds niet werkt, probeer het dan direct met docker te stoppen:
$ docker stop nginx
of verwijder het
$ docker rm -f nginx
Als dat nog steeds niet werkt, controleer dan uw versie van docker, misschien wilt u upgraden.
Het kan een bug zijn, je zou kunnen controleren of er een overeenkomt met jouw systeem/versie. Hier zijn een paar, bijvoorbeeld:
https://github.com/docker/docker/issues/10589
https://github.com/docker/docker/issues/12738
Als tijdelijke oplossing kunt u proberen het proces te stoppen.
$ ps aux | grep docker
$ kill 225654 # example process id
Antwoord 10
Alleen:
$ docker-compose restart [yml_service_name]