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


218

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는 실행중인 모든 컨테이너를 죽이지 않습니다!


4
docker-compose up --build
Jinna Balu

답변:


233

도커 작성

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

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

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


19
docker-compose build service1 service2 --no-cache 이 작업을 더 잘 수행합니다 ( github.com/docker/compose/issues/1049 ). 사용하기 전에 만들어진 캐시 된 컨테이너에 문제가있었습니다 docker-compose up -d --no-deps --build <service_name>
evgpisarchik

33
@evgpisarchik 주문이 조금 나왔습니다.docker-compose build --no-cache service1 service2
Matthew Wilcoxson

181

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.

4
이것이 어떻게 질문에 대답하는지 혼란 스럽습니다. 하나의 컨테이너 만 어떻게 재 구축합니까?
던컨 존스

11
명령 끝에 컨테이너 이름을 추가하여 하나의 컨테이너 만 다시 빌드 할 수 있습니다. docker-compose up -d --force-recreate --build container_name
HarlemSquirrel 2019

잠깐만, 컨테이너가 다시 생성build --no-cache 됩니다. 명령 설명이 완전히 틀린 경우를 제외하고는 옵션 과 동일하지 않습니다
Slav

67

문제를 해결해야합니다.

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 

12
당신이 원하는 경우 stoprm모든 컨테이너에 다음 명령을 사용할 수 있습니다 docker-compose down. 일부만 제거하려는 경우 솔루션이 더 좋습니다.
hirowatari

이 솔루션은 전체 도커 응용 프로그램을 중지하지 않고 서비스 중 하나를 다시 만들고 싶지 않은 설정에 적합합니다.
bluesummers

변경된 Dockerfile을 다시 작성 docker-compose build <id/name>하기 전에 실제로 실행 해야 up했습니다.
Vajk Hermecz

49

@ 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.

9

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

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

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

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


4

간단히 사용하십시오 :

docker-compose build [yml_service_name]

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


2

문제는:

$ 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

1

나를 위해 Docker Hub에서 --no-cache--pull( 와 함께 사용할 수있는) 새로운 종속성 만 가져 왔습니다 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)

0
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

rm을 사용하여 컨테이너를 제거해야합니다. 제거하지 않으면 Docker는 오래된 컨테이너를 시작합니다.


-9

뿐:

$ docker-compose restart [yml_service_name]

4
이것은 새로운 변화를 만들지 않을 것입니다. 매뉴얼에서-docker-compose.yml 구성을 변경하면이 명령을 실행 한 후에 이러한 변경 사항이 반영되지 않습니다.
denov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.