[docker] docker : $ PATH에 실행 파일이 없습니다.

설치하는 도커 이미지가 grunt있지만 실행하려고하면 오류가 발생합니다.

Error response from daemon: Cannot start container foo_1: \
    exec: "grunt serve": executable file not found in $PATH

대화식 모드에서 bash를 실행하면 grunt사용할 수 있습니다.

내가 뭘 잘못하고 있죠?

내 Dockerfile은 다음과 같습니다.

# https://registry.hub.docker.com/u/dockerfile/nodejs/ (builds on ubuntu:14.04)
FROM dockerfile/nodejs

MAINTAINER My Name, me@email.com

ENV HOME /home/web
WORKDIR /home/web/site

RUN useradd web -d /home/web -s /bin/bash -m

RUN npm install -g grunt-cli
RUN npm install -g bower

RUN chown -R web:web /home/web
USER web

RUN git clone https://github.com/repo/site /home/web/site

RUN npm install
RUN bower install --config.interactive=false --allow-root

ENV NODE_ENV development

# Port 9000 for server
# Port 35729 for livereload
EXPOSE 9000 35729
CMD ["grunt"]



답변

명령에 exec 형식을 사용하면 (예 : CMD ["grunt"]큰 따옴표가있는 JSON 배열) 셸 없이 실행 됩니다 . 이는 대부분의 환경 변수가 존재하지 않음을 의미합니다.

명령을 일반 문자열 (예 :)로 지정하면 CMD grunt이후 문자열 CMD이로 실행됩니다 /bin/sh -c.

이에 대한 자세한 정보는 Dockerfile 참조 의 CMD 섹션에 있습니다.


답변

이것은 오류 메시지를 붙여 넣을 때 Google에서 처음으로 얻은 결과이며 내 주장이 잘못 되었기 때문입니다.

컨테이너 이름은 모든 인수 뒤에 있어야합니다 .

나쁜:

docker run <container_name> -v $(pwd):/src -it

좋은:

docker run -v $(pwd):/src -it <container_name>


답변

나는 같은 문제를 발견했다. 나는 다음을 수행했다.

docker run -ti devops -v /tmp:/tmp /bin/bash

내가 그것을 바꿀 때

docker run -ti -v /tmp:/tmp devops /bin/bash

잘 작동합니다.


답변

이와 같은 오류가 발생할 수있는 몇 가지 이유가 있습니다.

내 경우에는, 그것은 (때문에 실행 파일이었다 docker-entrypoint.sh으로부터 유령 Dockerfile 블로그 내가 그것을 다운로드했던 한 후 실행 파일 모드를 결여).

해결책: chmod +x docker-entrypoint.sh


답변

Docker 컨테이너는 쉘없이 빌드 될 수 있습니다 (예 : https://github.com/fluent/fluent-bit-docker-image/issues/19 ).

이 경우 정적으로 컴파일 된 쉘을 복사하여 실행할 수 있습니다 (예 :

docker create --name temp-busybox busybox:1.31.0
docker cp temp-busybox:/bin/busybox busybox
docker cp busybox mycontainerid:/busybox
docker exec -it mycontainerid /bin/busybox sh


답변

어떤 이유로 “bash”clarifier를 추가하지 않으면 오류가 발생합니다. 진입 점 파일 맨 위에 “#! / bin / bash”를 추가해도 도움이되지 않습니다.

ENTRYPOINT [ "bash", "entrypoint.sh" ]


답변

나는 같은 문제를 겪었다. 많은 인터넷 검색 후에 문제를 해결하는 방법을 찾을 수 없었다.

갑자기 나는 바보 같은 실수를 발견했다 🙂

docs에서 언급했듯이 마지막 부분은 docker run컨테이너를로드 한 후 실행하려는 명령과 인수입니다.

컨테이너 이름이 아님 !!!

그것은 나의 당혹스러운 실수였다.

아래에서 나는 내가 잘못한 것을보기 위해 명령 줄 그림을 제공했습니다.

그리고 이것은 문서 에서 언급 한 수정 입니다.

여기에 이미지 설명을 입력하십시오