dockerfileでは失敗しますが、コンテナの対話型bashでは動作するスクリプトの原因に対するパイプラインの回答(はい/いいえ)

dockerfileでは失敗しますが、コンテナの対話型bashでは動作するスクリプトの原因に対するパイプラインの回答(はい/いいえ)

ドッカーコンテナを設定しようとしている間に、修正方法、理解方法、Googleメソッドがわからないことを偶然発見しました。

スクリプトを実行するDockerfileがあります。 Dockerfileの1つのレイヤーは次のとおりです。

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

動作します。

さて、実際には3つの[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

3つの問題があるのでうまくいくことを願っています。しかし、うまくいかず、理由がわかりません。 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不要なスクリプトのすべての行(エラーを引き起こした行を含む)を削除して、必要なものを得ることができました。また、1つの質問を削除するので、スクリプトには2つの質問だけが残ります。そのために、私は次のことを行います。

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

おすすめ記事