[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
컨테이너를로드 한 후 실행하려는 명령과 인수입니다.
컨테이너 이름이 아님 !!!
그것은 나의 당혹스러운 실수였다.
아래에서 나는 내가 잘못한 것을보기 위해 명령 줄 그림을 제공했습니다.
그리고 이것은 문서 에서 언급 한 수정 입니다.