답변:
매우 간단합니다 : 다음 명령을 사용하십시오 :
docker-compose restart worker
컨테이너를 종료하기 전에 중지 대기 시간 (초)을 설정할 수 있습니다
docker-compose restart -t 30 worker
컨테이너를 다시 시작하지 않고 컨테이너를 다시 시작합니다. 변경 사항을 적용한 다음 다시 시작하려면 다른 답변을 살펴보십시오.
docker-compose restart
명령은 변경 사항을 적용하지 않습니다. " docker-compose.yml
구성 을 변경하면 이 명령을 실행 한 후에 이러한 변경 사항이 반영되지 않습니다." 따라서를 사용하십시오 docker-compose up -d --build
. docs.docker.com/compose/reference/restart
docker ps -a
restart
이미를 실행하는 경우에도 변경 사항을 적용하지 않는 docker-compose build <container name>
이 비 작업 / 오답이다.
단일 노드를 다시 시작하는 다른 답변은 대상에 docker-compose restart worker
있습니다. 그러면 컨테이너가 바운스되지만 컨테이너를 별도로 다시 빌드하더라도 변경 사항은 포함되지 않습니다. 수동 수 stop
, rm
, create
,와 start
,하지만 쉽게 많은 방법이있다.
코드를 업데이트 한 경우 다음을 사용하여 단일 단계에서 빌드 및 다시로드를 수행 할 수 있습니다.
docker-compose up --detach --build
먼저 변경된 코드에서 이미지를 다시 작성하므로 캐시를 재사용 한 후 변경 사항이없는 경우 빠릅니다. 그런 다음 변경된 컨테이너 만 교체합니다. 다운로드 한 이미지가 오래되면 위 명령에 다음을 추가 할 수 있습니다.
docker-compose pull
변경된 이미지를 먼저 다운로드하려면 up
위와 같은 명령을 실행할 때까지 컨테이너가 다시 시작되지 않습니다 . 초기 정지는 불필요합니다.
단일 서비스에 대해서만이 작업을 수행하려면 다음과 같이 지정하려는 서비스로 up 또는 pull 명령을 수행하십시오.
docker-compose up --detach --build worker
다음은 첫 번째 옵션의 간단한 예입니다. Dockerfile은 자주 변경되는 코드 부분을 끝 부분에 유지하도록 구성되어 있습니다. 실제로 pip install
해당 파일은 거의 변경되지 않기 때문에 요구 사항이 별도로 가져옵니다 . nginx 및 redis 컨테이너는 최신 상태이므로 다시 시작되지 않았습니다. 전체 프로세스의 총 시간은 6 초 미만입니다.
$ time docker-compose -f docker-compose.nginx-proxy.yml up --detach --build
Building counter
Step 1 : FROM python:2.7-alpine
---> fc479af56697
Step 2 : WORKDIR /app
---> Using cache
---> d04d0d6d98f1
Step 3 : ADD requirements.txt /app/requirements.txt
---> Using cache
---> 9c4e311f3f0c
Step 4 : RUN pip install -r requirements.txt
---> Using cache
---> 85b878795479
Step 5 : ADD . /app
---> 63e3d4e6b539
Removing intermediate container 9af53c35d8fe
Step 6 : EXPOSE 80
---> Running in a5b3d3f80cd4
---> 4ce3750610a9
Removing intermediate container a5b3d3f80cd4
Step 7 : CMD gunicorn app:app -b 0.0.0.0:80 --log-file - --access-logfile - --workers 4 --keep-alive 0
---> Running in 0d69957bda4c
---> d41ff1635cb7
Removing intermediate container 0d69957bda4c
Successfully built d41ff1635cb7
counter_nginx_1 is up-to-date
counter_redis_1 is up-to-date
Recreating counter_counter_1
real 0m5.959s
user 0m0.508s
sys 0m0.076s
-no-cache
옵션 과 함께 사용할 수 있습니까? 내가 무언가를 추가하고 package.json
다시 변경 해야 한다고 말 RUN npm install
했지만 Dockerfile
자체는 바뀌지 않았습니다.
COPY
명령에이를 포함 시키면 캐시가 자동으로 중단됩니다.
COPY
Dockerfile에 명령이 있어야합니다. 는 git pull
package.json 파일을 업데이트하고 고정 표시기가 다른 파일에 복사 볼 때 빌드 캐시가 중단됩니다.
ADD
는 COPY
캐시 버스트 와 동일한 결과를 얻지 만 (모범 사례 링크에서 제안한 것처럼) 대부분 추가 기능이 필요하지 않으므로 언급하지 않아도됩니다.
변경 사항으로 서비스를 다시 시작하려면 다음 단계를 수행하십시오.
docker-compose stop -t 1 worker
docker-compose build worker
docker-compose create worker
docker-compose start worker
docker-compose up -d --build
모든 것을 다시 빌드하고 변경된 컨테이너를 다시 시작합니다. 가동 중지 시간과 함께 별도의 작성 및 시작 명령을 사용하여 중지 할 필요가 없습니다.
up
변경 된 컨테이너 만 다시 작성되어 다시 시작해야합니다.
다음 명령
docker-compose restart worker
컨테이너를 중지하고 시작합니다. 즉, docker-compose.xml에서 변경 사항을로드하지 않고
STOP은 PC에서 최대 절전 모드와 유사합니다. 따라서 중지 / 시작은 구성 파일에서 변경된 사항을 찾지 않습니다. 컨테이너 레시피 (docker-compose.xml)에서 다시로드하려면 컨테이너를 제거하고 작성해야합니다 (PC 재부팅과 유사)
따라서 명령은 다음과 같습니다
docker-compose stop worker // go to hibernate
docker-compose rm worker // shutdown the PC
docker-compose create worker // create the container from image and put it in hibernate
docker-compose start worker //bring container to life from hibernation
rm
줄 옵션을 -f
편리하게 (아무 프롬프트)와 전류 고정 표시기를 제공 create
하고 start
병합으로 up
(그래서 총에 우리는 3 명령하지 4가)와 대한 up
옵션 -d
(실행이 배경에) 유용합니다.
docker-compose -f [COMPOSE_FILE_NAME].yml restart [SERVICE_NAME]
사용 사례 # 1 : COMPOSE_FILE_NAME이 docker-compose.yml
있고 service가 worker 인 경우
docker-compose restart worker
사용 사례 # 2 : 파일 이름 sample.yml
이고 service가 worker 인 경우
docker-compose -f sample.yml restart worker
기본적으로 docker-compose는 명령 docker-compose.yml
을 실행할 경우를 찾습니다 docker-compose
. 그렇지 않으면 특정 파일 이름을 지정하는 플래그가 있습니다.-f [FILE_NAME].yml
컨테이너를 다시 시작하려면 다음을 수행하십시오.
docker-compose restart servicename
이 명령을 "컨테이너를 이름으로 컨테이너를 다시 시작하십시오"라고 생각하면 이는 명령과 같습니다 docker restart
.
ENV 변수를 변경하면 컨테이너에서 업데이트되지 않습니다. 중지하고 다시 시작해야합니다. 또는 단일 명령 docker-compose up
을 사용 하면 변경 사항을 감지하고 컨테이너를 다시 만듭니다.
다른 많은 사람들이 언급했듯이 docker-compose.yml
파일 자체 를 변경 하면 간단한 다시 시작으로 변경 사항이 적용되지 않습니다.
빌드 단계에서 또는 명령어 를 Dockerfile
사용하여 컨테이너 내부에 코드를 복사하는 경우 코드가 변경 될 때마다 컨테이너를 다시 빌드해야합니다 ( ).ADD
COPY
docker-compose build
docker-compose restart
다음 docker-compose.yml
과 같이 볼륨 지시문으로 코드가 컨테이너에 경로 매핑되면 코드가 완벽하게 작동합니다 .
services:
servicename:
volumes:
- .:/code
그러나 DEBUG 모드에서 선택한 프레임 워크에서 제공하는 라이브 코드 리로딩을 사용하는 것이 좋습니다 (또는 선택한 언어로 자동 재로드 패키지를 검색 할 수 있음). 이것을 추가하면 코드가 변경된 후 매번 컨테이너를 다시 시작할 필요가 없으며 대신 프로세스를 다시로드해야합니다.