도커 이미지를 실행할 때 CMD를 무시하려면 어떻게해야합니까?


123

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

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

나는 현재 :

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

CMD를 비워 두는 방법이 있습니까 (그래서 "--login"을 사용할 필요는 없습니까?)

답변:


125

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

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

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

docker exec -it $CONTAINER_ID /bin/bash

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


"/ usr / sbin / apache2ctl / bin / bash"를 실행하지 않습니까? (귀하의 예제는 진입 점을 재정의하지 않기 때문에 Dockerfile에 정의 된 진입 점을 사용하거나 누락 된 것이 있습니까?)
warp

이전 / 최신 도커 버전과 다른 점이 있습니까? gist.github.com/warpr/26a5cc471dce7fcf9021 의 진입 점을 확실히 실행합니다 . 우분투 13.10에서 도커 0.10.0을 사용하고 있습니다.
워프

4
--entrypoint를 전달하면 진입 점이 재정의됩니다. 그러나 --entrypoint를 사용할 때 CMD를 비워 두려면 어떻게해야합니까? bash의 경우 -i 또는 --login과 같은 것을 사용할 수 있지만 사용하려는 모든 진입 점이 동일한 "더미"인수를 갖는 것은 아닙니다.
워프

1
적어도 Docker v1.11.1에서는 --entrypoint를 재정의하면 CMD가 진입 점에 정상적으로 추가되는 것을 막을 수 있습니다. 진입 점이 재정의되지 않은 경우에만 발생합니다.
Jasmine Hegman

1
-i이후가 $IMAGE있습니까?
Eyal Levin

27

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

관련 부분 :

CMD (기본 명령 또는 옵션) Docker 명령 줄에서 선택적 COMMAND를 호출하십시오.

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

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

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

따라서 원하는 작업을 수행하려면 cmd 지정하고을 사용하여 재정의하십시오 /bin/bash. "빈"것은 아니지만 99 %의 작업을 수행합니다.


죄송합니다. 세부 사항을 간과했습니다. 단축 --login을 제외하고 -l귀하의 솔루션은 이미 얻는 것만 큼 좋습니다.
Simon Thum

오늘 내가 본 재미있는 일이 있습니다. 명령이 무시되지 않고 추가됩니다. 컨테이너 내부의 PS입니다. 내가 추가 한 명령은 echo "db 설정"이고 내장 명령은 / usr / bin / geth입니다. 또한 진입 점을 ""로 설정했습니다. 1 ? Ssl 0:00 /usr/bin/geth echo setting up db
Paul S

도커 참조 링크가 더 이상 작동하지 않습니다-명백한 대체물을 찾을 수 없습니다.
Chris Kimpton

방금 수정했지만 찾기가 어렵다는 것을 발견했습니다. (
Simon Thum

15

여기에 오는 사람은 진입 점 AND 명령을 재정 의하여 다른 명령을 전달합니다.

 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용이며 다른 이미지 일 가능성이 높습니다.


1
단지 addtion 쉘 명령 기반 writen를 JSON해야한다, 그래서 대신 작은 따옴표로 인용으로는 '...'큰 따옴표를 사용"..."
지미 Obonyo ABOR

또는 원하는만큼 --entrypoint 인수를 전달하십시오
Nick Roz

"exec : \"-c \ ": $ PATH에 실행 파일이 없습니다": 알 수 없습니다.
리처드

컨테이너의 경로를 확인하십시오. 실제로 존재하지 않을 수도 있습니다. 대부분의 이미지가 /bin/sh있지만 귀하 의 이미지는 그렇지 않을 수 있습니다.
infro
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.