[docker] docker-compose.yml에서 도커 컨테이너를 다시 작성하는 방법은 무엇입니까?

docker-compose.yml에 정의 된 서비스 범위가 있습니다. 이 서비스는 시작되었습니다. 이 중 하나만 다시 빌드하고 다른 서비스를 시작하지 않고 시작해야합니다. 다음 명령을 실행합니다.

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

결국 나는 오래된 nginx 컨테이너를 얻었습니다. 그런데 docker-compose는 실행중인 모든 컨테이너를 죽이지 않습니다!



답변

도커 작성

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

–no-deps-링크 된 서비스를 시작하지 않습니다.

–build-컨테이너를 시작하기 전에 이미지를 빌드합니다.


답변

docker-compose 1.19 포함 up

docker-compose up --build --force-recreate --no-deps [-d] [<service_name>..]

하나 이상의 service_name인수가 없으면 모든 컨테이너가 다시 작성됩니다

도움말 메뉴에서

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.


답변

문제를 해결해야합니다.

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


답변

@ HarlemSquirrel이 게시 한 것처럼 최고이며 올바른 해결책이라고 생각합니다.

그러나 OP 관련 문제에 대답하려면 docker-compose.yml파일의 모든 서비스를 다시 만들지 않고 nginx하나의 서비스 만 다시 만들려는 것이기 때문에 다음 명령과 같아야합니다 .

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

옵션 설명 :

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.


답변

어쩌면이 단계는 정확하지 않지만 다음과 같이합니다.

도커 중지 구성 : $ docker-compose down

컨테이너를 제거하십시오. $ docker system prune -a

도커 작성 시작 : $ docker-compose up -d


답변

간단히 사용하십시오 :

docker-compose build [yml_service_name]

교체 [yml_service_name]에 서비스 이름과 docker-compose.yml파일. docker-compose restart변경 사항을 적용하는 데 사용할 수 있습니다 . --no-cache캐시를 무시하는 데 사용할 수 있습니다 .


답변

문제는:

$ docker-compose stop nginx

작동하지 않았습니다 (아직 실행 중이라고 말함). 당신이 어쨌든 그것을 재건하려고한다면, 당신은 그것을 죽일 수 있습니다.

$ docker-compose kill nginx

그래도 작동하지 않으면 도커로 직접 중지하십시오.

$ docker stop nginx

또는 삭제

$ docker rm -f nginx

그래도 작동하지 않으면 도커 버전을 확인하십시오. 업그레이드 할 수 있습니다.

버그 일 수 있습니다. 시스템 / 버전과 일치하는지 확인할 수 있습니다. 예를 들면 다음과 같습니다.
https://github.com/docker/docker/issues/10589

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

해결 방법으로 프로세스를 종료하려고 할 수 있습니다.

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