수색…


통사론

  • 도커 통계 [옵션] [컨테이너 ...]
  • 도커 로그 [옵션] CONTAINER
  • 도커 상단 [옵션] 컨테이너 [ps 옵션]

실행 컨테이너에 들어가기

컨테이너에서 작업을 실행하려면 docker exec 명령을 사용하십시오. 때때로 이것은 모든 명령이 컨테이너 내부에서 실행되기 때문에 "컨테이너 입력"이라고 불립니다.

docker exec -it container_id bash

또는

docker exec -it container_id /bin/sh

이제 실행중인 컨테이너에 셸이 있습니다. 예를 들어 디렉토리의 파일을 나열한 다음 컨테이너를 떠납니다.

docker exec container_id ls -la

-u flag 를 사용하여 특정 사용자 (예 : uid=1013 , gid=1023 의 컨테이너를 입력 할 수 있습니다.

docker exec -it -u 1013:1023 container_id ls -la

uid와 gid는 컨테이너에 존재할 필요는 없지만 명령으로 인해 오류가 발생할 수 있습니다. 컨테이너를 시작하고 즉시 체크 아웃하기 위해 내부에 들어가려면 다음을 수행하십시오.

docker run...; docker exec -it $(docker ps -lq) bash

docker ps -lq 명령은 마지막으로 시작된 l -lq 컨테이너의 ID 만 출력합니다. (이것은 컨테이너에서 인터프리터로 사용할 수있는 bash를 가지고 있다고 가정합니다. sh 또는 zsh 또는 다른 것을 가질 수 있습니다)

리소스 사용 모니터링

시스템 리소스 사용량을 검사하는 것은 오작동하는 응용 프로그램을 찾는 효과적인 방법입니다. 이 예제는 컨테이너의 전통적인 top 명령과 동일합니다.

docker stats

특정 컨테이너의 통계를 따르려면 명령 줄에 나열하십시오.

docker stats 7786807d8084 7786807d8085

Docker 통계에는 다음 정보가 표시됩니다.

CONTAINER     CPU %   MEM USAGE / LIMIT   MEM %    NET I/O               BLOCK I/O
7786807d8084  0.65%   1.33 GB / 3.95 GB   33.67%   142.2 MB / 57.79 MB   46.32 MB / 0 B

기본적으로 docker stats 는 컨테이너의 ID를 표시합니다. 컨테이너의 이름을 표시하는 것을 선호한다면이 방법은별로 도움이되지 않습니다.

docker stats $(docker ps --format '{{.Names}}')

컨테이너의 프로세스 모니터링

시스템 리소스 사용량을 검사하는 것은 실행중인 응용 프로그램에서 문제를 좁힐 수있는 효율적인 방법입니다. 이 예제는 컨테이너에 대한 일반적인 ps 명령과 동일합니다.

docker top 7786807d8084

출력 형식을 필터링하려면 명령 줄에 ps 옵션을 추가하십시오.

docker top 7786807d8084 faux

또는 루트로 실행되는 프로세스 목록을 얻으려면 잠재적으로 위험한 방법입니다.

docker top 7786807d8084 -u root

docker top 명령은 쉘 또는 ps 명령없이 최소한의 컨테이너를 해결할 때 특히 유용합니다.

실행중인 컨테이너에 연결

'컨테이너에 연결'은 컨테이너 (및 그 안에있는 모든 프로그램)가 실행되고있는 상황에서 터미널 세션을 시작하는 행위입니다. 이것은 주로 디버깅 목적으로 사용되지만 특정 데이터를 컨테이너 내에서 실행되는 프로그램에 전달해야하는 경우 필요할 수도 있습니다.

attach 명령은이를 수행하는 데 사용됩니다. 이 구문은 다음과 같습니다.

docker attach <container>

<container> 는 컨테이너 ID 또는 컨테이너 이름이 될 수 있습니다. 예를 들면 :

docker attach c8a9cf1a1fa8

또는:

docker attach graceful_hopper

사용자 및 도커 설정 방법에 따라 위의 명령을 sudo 해야 할 수도 있습니다.

참고 : Attach는 한 번에 하나의 쉘 세션 만 컨테이너에 첨부 할 수 있습니다.

경고 : 모든 키보드 입력은 컨테이너로 전달됩니다. Ctrl-c 를 누르면 컨테이너가 삭제 됩니다.

첨부 된 컨테이너에서 분리하려면 Ctrl-p , Ctrl-q 를 연속적으로 누르십시오.

여러 셸 세션을 컨테이너에 연결하거나 간단히 대안으로 사용하려면 exec 를 사용할 수 있습니다. 컨테이너 ID 사용 :

docker exec -i -t c8a9cf1a1fa8 /bin/bash

컨테이너 이름 사용 :

docker exec -i -t graceful_hopper /bin/bash

exec 는 컨테이너 (이 경우에는 /bin/bash (쉘, 아마도 컨테이너에있는 쉘) 내의 프로그램을 실행합니다. -i 는 대화식 세션을 나타내고 -t 는 의사 TTY를 할당합니다.

참고 : 연결 과 달리 Ctrl-c 를 누르면 대화식으로 실행될 때만 exec 'd 명령이 종료됩니다.

로그 인쇄

로그를 따르면 라이브 실행 응용 프로그램을 디버그하는 데 방해가되지 않습니다. 이 예에서는 컨테이너 7786807d8084 의 전통적인 tail -f some-application.log 의 동작을 재현합니다.

docker logs --follow --tail 10 7786807d8084

이 명령은 기본적으로 컨테이너 프로세스 (pid가 1 인 프로세스)의 표준 출력을 표시합니다.

로그에 기본적으로 타임 스탬프가 포함되어 있지 않으면 --timestamps 플래그를 추가 할 수 있습니다.

중지 된 컨테이너의 로그를 볼 수도 있습니다.

  • docker run ... ; docker logs $(docker ps -lq) 실패한 컨테이너를 시작하십시오 docker run ... ; docker logs $(docker ps -lq)

  • 다음과 함께 컨테이너 ID 또는 이름을 찾습니다.

docker ps -a

그리고

docker logs container-id 또는

docker logs containername

중지 된 컨테이너의 로그를 볼 수 있기 때문에

Docker 컨테이너 프로세스 디버깅

Docker는 가상 머신이 아닌 프로세스를 실행하는 멋진 방법입니다. 따라서 "컨테이너에서"프로세스를 디버깅하는 것은 단순히 실행중인 컨테이너 프로세스를 호스트 (예 : 루트)의 프로세스를 검사 할 수있는 적절한 권한을 가진 사용자로 검사하여 "호스트에서"가능합니다. 예를 들어 루트에서 간단한 ps 를 실행하여 호스트의 모든 "컨테이너 프로세스"를 나열 할 수 있습니다.

sudo ps aux

현재 실행중인 Docker 컨테이너가 출력에 나열됩니다.

이는 컨테이너에서 실행중인 프로세스를 디버깅하기위한 응용 프로그램 개 _ 중에 유용 할 수 있습니다. 적절한 권한을 가진 사용자로서 strace, ltrace, gdb 등과 같은 일반적인 디버깅 유틸리티를 컨테이너 프로세스에서 사용할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow