도커 컨테이너를 설정하려고 시도하는 동안 수정 방법, 이해 방법, Google 방법을 모르는 것을 우연히 발견했습니다.
스크립트를 실행하는 Dockerfile이 있습니다. Dockerfile의 한 레이어는 다음과 같습니다.
RUN cd /app/spinnaker-1.23.0.27-amd64 && \
printf 'y\nn\n' | sh install_spinnaker.sh
기본적으로 나는 그 줄을 복사했다일부 GitHub 저장소.
docker build --tag=app .
이 Dockerfile을 사용하여 빌드 하려고 하면 install_spinnaker.sh
끝까지 실행되지만 충돌이 발생합니다.
[Y/n] $ The command '/bin/sh -c cd /app/spinnaker-1.23.0.27-amd64 && printf 'y\nn\n' | sh install_spinnaker.sh' returned a non-zero code: 1
반면에 Dockerfile에서 이 줄을 제거하는 경우 이를 빌드한 다음 docker run -ti app bash
컨테이너 내부를 사용하여 컨테이너에서 bash를 연 다음 동일한 명령을 실행합니다.
cd /app/spinnaker-1.23.0.27-amd64 && printf 'y\nn\n' | sh install_spinnaker.sh
작동합니다.
이제 실제로 세 가지 [Y/n] 질문이 있습니다. 그러면 printf 'y\nn\n' | sh install_spinnaker.sh
dockerfile이나 대화형 bash에서 작동하지 않아야 할까요?
그래서 몇 가지 다른 것을 시도했습니다. 나에게는 다음이 가장 합리적인 것 같습니다.
RUN cd /app/spinnaker-1.23.0.27-amd64 && \
printf 'y\nn\nn\n' | sh install_spinnaker.sh
세 가지 문제가 있기 때문에 잘 작동되길 바랍니다. 하지만 작동하지 않으며 이유를 모르겠습니다. Dockerfile을 빌드하면 마지막에 다음이 제공됩니다.
Installation complete.
Would you like to register the installed software?
[Y/n] $ error: process ID out of range
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).
The command '/bin/sh -c cd /app/spinnaker-1.23.0.27-amd64 && printf 'y\nn\nn\n' | sh install_spinnaker.sh' returned a non-zero code: 1
여기서는 내 실수를 볼 수 없습니다. 명백한 내용이 있으면 알려 주시기 바랍니다.
답변1
error: process ID out of range
가 있는 컨테이너에서 실행할 때도 오류가 발생한 것으로 나타났습니다 docker rum -ti bash
. 어떻게 든 오류가 표시되지 않으며 어쨌든 설치가 성공했습니다. 그래서 저는 눈치 채지 못했고 문제가 Docker 어딘가에 있다고 생각했지만 그렇지 않았습니다.
install_spinnaker.sh
필요하지 않은 스크립트의 모든 줄(오류를 일으킨 줄 포함)을 제거하여 원하는 것을 얻을 수 있었습니다. 또한 하나의 질문을 제거하므로 이제 스크립트에는 두 개의 질문만 남게 됩니다. 이를 위해 나는 다음을 수행합니다.
sed -i '50,101d' install_spinnaker.sh`
스크립트를 실행하기 전에.
Dockerfile에서 레이어는 이제 다음과 같습니다.
RUN cd /app/spinnaker-1.23.0.27-amd64 && \
sed -i '50,101d' install_spinnaker.sh && \
printf 'y\nn\n' | sh install_spinnaker.sh