ドッカーコンテナを設定しようとしている間に、修正方法、理解方法、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.sh
dockerfileやインタラクティブ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