programing

도커에서 실행 중/중지된 컨테이너의 전체 명령 보기

lastmoon 2023. 8. 30. 21:58
반응형

도커에서 실행 중/중지된 컨테이너의 전체 명령 보기

Docker에서 실행 중인 컨테이너/프로세스의 전체 명령을 보려면 어떻게 해야 합니까?

$ docker ps --all
CONTAINER ID    IMAGE          COMMAND                 CREATED          STATUS                     PORTS    NAMES
5b6291859b61    nginx:1.7.8    "nginx -g 'daemon of    4 minutes ago    Exited (0) 4 minutes ago            thirsty_brattain

"nginx -g 'daemon of"만 보입니다.전체 명령이 아닌 여기.

docker ps --no-trunc실행 중인 컨테이너의 다른 세부 정보와 함께 전체 명령이 표시됩니다.

사용:

docker inspect -f "{{.Name}} {{.Config.Cmd}}" $(docker ps -a -q)

모든 컨테이너에 대해 "컨테이너 검사"를 수행합니다.

사용:

docker inspect -f "{{.Path}} {{.Args}} ({{.Id}})" $(docker ps -a -q)

하면 됩니다.docker ps.

TL-DR

docker ps --no-trunc그리고.docker inspect CONTAINER하지만, 는 달된명령따컨시작위하기실진해다입제는과 수 .${ANY_VAR}컨테이너 환경 변수가 해결된 것으로 인쇄되지 않기 때문입니다.

, 그을극복위해기하것,,docker inspect CONTAINER 또한 할 수 .Config.Env소유물.

docker ps그리고.docker inspect실행된 진입점과 해당 명령에 대한 정보를 제공합니다. 스크립트종종, 그것래진스다니입크트립입점퍼은▁(종다)입니다..sh컨테이너에 의해 시작된 "실제" 프로그램이 아닙니다.이에 대한 정보를 얻으려면 프로세스 정보를 요청합니다.ps또는/proc/1/cmdline도와 주세요.


1)docker ps --no-trunc

실행 중인 모든 컨테이너에 대해 실행된 진입점과 명령을 인쇄합니다.하지만(우리가) 변수: 도커 환경 변수)의 .$FOO또는${FOO}).
만약 우리 컨테이너가 env 변수를 사용한다면, 그것은 충분하지 않을 수도 있습니다.

예를 들어 알파인 컨테이너를 실행합니다.

docker run --name alpine-example -e MY_VAR=/var alpine:latest sh -c 'ls $MY_VAR'

다음과 같은 도커 -ps를 사용하는 경우:

도커 ps -a --filter name=docs-docs --no-docs

인쇄:

컨테이너 ID 이미지 명령 생성 상태 포트 이름5b064a6de6d8417...alpine:최신 "sh - c'ls $MY_VAR" 2분 전에 종료됨 (0) alpine-example

.sh -c 'ls $MY_VAR'그렇지만$MY_VAR실제로 해결되지 않았습니다.

2)docker inspect CONTAINER

알파인 샘플 용기를 검사할 때:

docker inspect alpine-example | grep -4 Cmd

명령도 있지만 env 변수 값이 표시되지 않습니다.

        "Cmd": [
            "sh",
            "-c",
            "ls $MY_VAR"
        ],

실제로 이러한 도커 명령으로는 보간된 변수를 볼 수 없었습니다.
inspect로 에 대한 변수를 할 수 . : 트 드 이 오 변 환 변 모 를 다 있 수 니 습 표 로 할 시 도 별 두 수 경 와 수 레

docker inspect  alpine-example  | grep -4 -E "Cmd|Env"

인쇄:

        "Env": [
            "MY_VAR=/var",
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
        ],
        "Cmd": [
            "sh",
            "-c",
            "ls $MY_VAR"
        ]

더 쉬운 방법은 다음을 사용하는 것입니다.--format의 깃발.docker inspect렌더링할 JSON 특성을 지정할 수 있습니다.

docker inspect --format '{{.Name}} {{.Config.Cmd}}  {{ (.Config.Env) }}'  alpine-example

출력:

/usr-bin [sh - cls $MY_VAR] [MY_VAR=/var PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/bin:/sbin:/sbin]

실행 중인 컨테이너에 대해 컨테이너 자체에서 시작된 프로세스 검색

도커에 의해 실행되는 진입점과 명령은 도움이 될 수 있지만 경우에 따라 그것은 래퍼 진입점 스크립트일 뿐이기 때문에 충분하지 않습니다..sh)는 실제/핵심 프로세스를 시작하는 역할을 합니다.
예를 들어 Nexus 컨테이너를 실행할 때 실행되고 컨테이너를 실행하도록 표시되는 명령은 다음과 같습니다."sh -c ${SONATYPE_DIR}/start-nexus-repository-manager.sh".
Postgre용SQL 즉,"docker-entrypoint.sh postgres".

더 많은 정보를 얻으려면 실행 중인 컨테이너에서 실행할 수 있습니다.docker exec CONTAINER ps aux.
관심 없는 다른 프로세스를 인쇄할 수도 있습니다.
진입점에서 시작한 초기 프로세스로 범위를 좁히기 위해 다음을 수행할 수 있었습니다.

docker exec CONTAINER ps -1

지정합니다.1왜냐하면 진입점에 의해 실행되는 과정은 일반적으로 다음과 같은 것이기 때문입니다.1이드

없이.ps 그 정보를 우는여전수있다니습찾을에서 수 ./proc/1/cmdline(전체는 아니지만 대부분의 Linux 디스트리뷰터에서). 예:

docker exec CONTAINER cat /proc/1/cmdline | sed -e "s/\x00/ /g"; echo    

수 경우, 의 전체 명령을 할 수 또 :: execute입니다.ps -PID Docker 데몬이

ps -$(docker container inspect --format '{{.State.Pid}}'  CONTAINER)

도커를 사용한 사용자 친화적인 포맷

docker ps --no-trunc항상 읽기 쉬운 것은 아닙니다.
표하면 더를 얻을 수 있습니다.: 인할열을표형지더수효일있다습니적율면하정로식으쇄▁spec.

docker ps   --no-trunc  --format "table{{.Names}}\t{{.CreatedAt}}\t{{.Command}}"

별칭을 만드는 데 도움이 될 수 있습니다.

alias dps='docker ps   --no-trunc  --format "table{{.Names}}\t{{.CreatedAt}}\t{{.Command}}"'

너무 유용하기 때문에 딜런의 의견을 전면적인 답변으로 이동:

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock assaflavie/runlike YOUR-CONTAINER

그것은 무엇을 합니까?컨테이너 내부에서 https://github.com/lavie/runlike 를 실행하고 전체 도커 실행 명령을 가져온 다음 컨테이너를 제거합니다.

git 저장소 https://github.com/lavie/runlike 에서 runlike를 사용합니다.

런라이크 설치 방법

pip install runlike

컨테이너 ID를 인수로 수락하여 컨테이너 ID를 추출하려면 다음 명령을 사용합니다.

docker ps -a -q

다음 명령을 사용하여 전체 도커 실행 명령을 추출하는 데 runlike를 사용할 수 있습니다.

runlike <docker container ID>

언급URL : https://stackoverflow.com/questions/27380641/see-full-command-of-running-stopped-container-in-docker

반응형