Hoe de docker-container opnieuw op te bouwen in docker-compose.yml?

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

$ 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.ymlopnieuw 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 -averwijdert 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 restartgebruiken om ervoor te zorgen dat wijzigingen worden doorgevoerd. U kunt --no-cachegebruiken om de cache te negeren.


Antwoord 8

Voor mij haalde het alleen nieuwe afhankelijkheden van Docker Hub met zowel --no-cacheals --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]

Other episodes