dockerfile에서는 실패하지만 컨테이너의 대화형 bash에서는 작동하는 스크립트의 원인에 대한 파이프라인 답변(예/아니요)

dockerfile에서는 실패하지만 컨테이너의 대화형 bash에서는 작동하는 스크립트의 원인에 대한 파이프라인 답변(예/아니요)

도커 컨테이너를 설정하려고 시도하는 동안 수정 방법, 이해 방법, 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.shdockerfile이나 대화형 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

관련 정보