Docker 이미지를 실행할 때 CMD를 어떻게 재정의할 수 있나요?

Docker 이미지를 실행할 때 CMD를 어떻게 재정의할 수 있나요?

진입점과 cmd가 모두 지정된 다른 사람이 만든 도커 이미지를 검사하고 싶습니다. 예를 들면 다음과 같습니다.

ENTRYPOINT ["/usr/sbin/apache2ctl"]
CMD ["-D", "FOREGROUND"]

나는 현재 다음을 수행합니다.

docker run --interactive --tty --entrypoint=/bin/bash $IMAGE --login

CMD를 비워두도록 재정의하는 방법이 있습니까(그래서 "--login"을 사용할 필요가 없음)?

답변1

via를 입력한 다음 docker run -it --entrypoint=/bin/bash $IMAGE -i(이미지에서 새 컨테이너를 시작하고 대화형 모드에서 bash 셸을 가져옴) 해당 컨테이너에서 진입점 명령을 실행할 수 있습니다.

그런 다음 실행 중이어야 하는 상태에서 실행 중인 컨테이너를 검사할 수 있습니다.

exec편집: Docker 1.3부터 ​​실행 중인 컨테이너에서 프로세스를 실행하는 데 사용할 수 있습니다 . 평소처럼 컨테이너를 시작한 후 다음을 실행하여 입력하세요.

docker exec -it $CONTAINER_ID /bin/bash

bash가 설치되어 있다고 가정하면 실행 중인 컨테이너에 대한 셸 액세스 권한이 부여됩니다.

답변2

보다:https://docs.docker.com/engine/reference/run/#overriding-dockerfile-image-defaults

관련 부분:

CMD(기본 명령 또는 옵션) Docker 명령줄에서 선택적 COMMAND를 기억하세요.

$ docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]

IMAGE를 만든 사람이 이미 Dockerfile CMD를 사용하여 기본 COMMAND를 제공했을 수 있으므로 이 명령은 선택 사항입니다. 운영자(이미지에서 컨테이너를 실행하는 사람)로서 새 COMMAND를 지정하기만 하면 해당 CMD를 재정의할 수 있습니다.

이미지가 ENTRYPOINT도 지정하는 경우 CMD 또는 COMMAND가 ENTRYPOINT에 인수로 추가됩니다.

그래서 당신이 원하는 것을 하기 위해서는 당신이 필요합니다오직cmd를 지정하고 /bin/bash. 완전히 "비어있지"는 않지만 작업이 99% 완료됩니다.

답변3

진입점 및 명령을 재정의하여 다른 명령을 전달하기 위해 여기에 오는 사람의 경우 예를 들어 진입점 스크립트 대신 bash를 실행한 다음 매개 변수를 사용하여 다른 명령을 실행합니다(다른 답변에서는 명확하지 않았습니다).

 docker run [other options] --entrypoint '/bin/sh' $IMAGE -c 'npm link gulp gulp-sass gulp-sourcemaps'

-c 'npm link ...'매개변수이므로 /bin/sh여기에서 컨테이너에서 실행하려는 명령을 전달할 수 있습니다. /bin/sh알파인 이미지용이며 /bin/bash다른 이미지용일 가능성이 높습니다.

관련 정보