2016-08-09 2 views
4

도커 버전 1.12, 내가있어 내가 check_running.sh 쉘 업데이트 및 건강 검사를 롤백 할 수있어 Dockerfile상태 점검 명령 (안 Dockerfile에서!)

FROM nginx:latest 

RUN touch /marker 

ADD ./check_running.sh /check_running.sh 
RUN chmod +x /check_running.sh 

HEALTHCHECK --interval=5s --timeout=3s CMD ./check_running.sh 

Here에서 스크립트. 여기에서 check_running.sh 스크립트는 image으로 복사되므로 시작된 컨테이너에 복사됩니다.

자, 내 질문은 외부에있는 컨테이너 및 스크립트의 측면에서 상태 확인 방법이 있습니다.

컨테이너 성능을 얻는 건강 검사 명령 (스크립트에서 작성한 내용에 따라 다름)을 제외하고 컨테이너의 성능이 좋지 않으면 이전 버전으로 롤백해야합니다 () 그것이 좋지 않은 경우 컨테이너가, 그것은) 이전에 백을 굴려 Dockerfile HEALTHCHECK 옵션을 사용할 수없는

감사

답변

3

건강에 대한 방법은 용기도 외부에 스크립트의 출력 측에서 확인이 실패 성공하거나 명령의 출력을 볼 수 있습니다. 그것이 좋지 않은 경우, 컨테이너를 모니터링하는 프로세스의

종류, 그것은 롤백한다 이전

에를 당신은 몇 가지 옵션이 있습니다 : 외부에서

  1. 을, 당신은 프로세스를 실행 컨테이너 내부에서 도커 간부와 건강 상태를 비교합니다. 쉘 명령의 순서가 될 수 있습니다. 스크립트를 컨테이너 외부에 보관하려면 cat script.sh | docker exec -it container sh -s과 같은 것을 사용할 수 있습니다.
  2. 컨테이너 외부에서 컨테이너 상태를 확인합니다 (예 :컨테이너 내부에서 실행되어야하는 프로세스를 찾고 (보안 프로파일을 설정하고 ps -Zax을 사용하거나 children of the daemon을 찾으십시오) 각 컨테이너에 --user 12345의 특정 사용자 ID를 부여한 다음 해당 컨테이너를 찾으십시오. 서비스에 연결합니다. 올바른 컨테이너 내부에서 실행되는지 확인해야합니다. /var/lib/docker/devicemapper/mnt/<hash>/rootfs 아래의 컨테이너 파일 시스템에 액세스 할 수 있습니다.
  3. HEALTHCHECK을 컨테이너 내부에서 실행하고 건강 상태를 예를 들어 docker inspect --format='{{json .State.Health.Status}}' <containername>으로 확인하십시오. Dockerfile에있는 라인 : HEALTHCHECK CMD wget -q -s http://google.com 컨테이너를 확인하려면 인터넷에 연결되어 있어야합니다.

향후 다른 도구와 호환 될 가능성이 높기 때문에 옵션 3을 권하고 싶습니다.

0

한다, 모든 검사는 컨테이너 내부에서 실행. 나에게 이는 호스트에서 직접 실행될 가능성이있는 신뢰할 수없는 코드를 피할 수 있고 컨테이너 내부의 상태 검사에 대한 종속성을 포함 할 수 있으므로 좋은 결과입니다.

외부에서 컨테이너를 모니터링해야하는 경우 다른 도구 또는 모니터링 응용 프로그램을 사용해야합니다. 그 중 상당수는 외부에 있습니다.

0

docker inspect을 컨테이너에 실행하여 상태 검사 결과를 볼 수 있습니다.

응용 프로그램에 따라 다른 접근법은 /healthz 끝점을 노출하여 상태 검사가 필요하므로 외부 또는 내부에서 필요에 따라 쿼리 할 수 ​​있습니다.

2

방금 ​​blog! 님의 댓글을 ^습니다. 그는 Docker 문서 HealthCheck 섹션을 참조했습니다. dockerfile 기본값을 "대체"하는 docker 명령에 대한 "상태 확인"옵션이 있습니다. 나는 아직 체크하지 않았다!. 그러나 내가 원하는 것을 얻는 것이 좋다고 생각합니다. 확인하고 답변을 업데이 트됩니다! 도커 명령을 검사

+1

'docker run --health-cmd ...'는 Dockerfile의'HEALTHCHECK' 값을 무시하고 있습니다. 주로 컨테이너 내부에서 스크립트가 실행되는 위치는 변경되지 않습니다. – BMitch

0

docker inspect --format='{{json .State.Health}}' your-container-name