2017-09-23 9 views
2

私はDockerfileの下に構築しようとしているが、それはocp-indent: not found The command '/bin/sh -c ocp-indent --help' returned a non-zero code: 127コマンドが非ゼロのコードが返さ:127

FROM ocaml/opam 

WORKDIR /workdir 

RUN opam init --auto-setup 
RUN opam install --yes ocp-indent 
RUN ocp-indent --help 

ENTRYPOINT ["ocp-indent"] 
CMD ["--help"] 

を言っRUN ocp-indent --helpに失敗し続けて、私はdocker run -it <image id> bash -ilを経由して、その前に走ったイメージにボコボコにし、 ocp-indent --helpを実行して正常に動作しました。なぜそれが失敗しているのか分かりません。

+0

'run'が動作するのはなぜか分かりませんが、' ocp-インデント? – kichik

+0

? 'Run '? – user1795832

+0

うん。おそらく '/ bin'や'/usr/bin'にあります。 – kichik

答えて

2

これはPATH関連の問題とプロファイルです。 sh -cまたはbash -cを使用すると、プロファイルファイルが読み込まれません。しかし、bash -lcを使用すると、プロファイルをロードしてコマンドを実行することを意味します。このコマンドを実行するには、プロファイルに必要なパス設定が必要になります。

編集-1

ように、元の答えの問題は、それが働くことができないということでした。我々は

ENTRYPOINT ["/bin/bash", "-lc", "ocp-indent"] 
CMD ["--help"] 

を持っていたとき、それが機能するために、我々は/bin/bash -lc "ocp-indent --help"を必要としながら、それは最終的に/bin/bash -lc ocp-indent --helpに変換されます。これは、entrypointのcommandを使って直接行うことはできません。だから我々は

#!/bin/sh -l 
ocp-indent "[email protected]" 

は、ホスト上のchmod +x entrypoint.shに確認してください新しいentrypoint.shファイルを作成する必要があります。そして、ビルドした後、以下の

FROM ocaml/opam 

WORKDIR /workdir 

RUN opam init --auto-setup 
RUN opam install --yes ocp-indent 
SHELL ["/bin/sh", "-lc"] 
COPY entrypoint.sh /entrypoint.sh 
ENTRYPOINT ["/entrypoint.sh"] 
CMD ["--help"] 

にDockerfileを更新し、それが

あなたは簡単に

docker run -it --entrypoint "/bin/sh" <image id> env 
docker run -it --entrypoint "/bin/sh -l" <image id> env 
docker run -it --entrypoint "/bin/bash" <image id> env 
docker run -it --entrypoint "/bin/bash -l" <image id> env 
コマンド以下の使用して両者の差をテストすることができ

$ docker run f76dda33092a 
NAME 
     ocp-indent - Automatic indentation of OCaml source files 

SYNOPSIS 

作品オリジナルの答え実行

ここでは、bashにcorデフォルトではrectのパスになります。または、-lフラグを使用した場合にのみ発生します。その場合、ドッカーイメージのデフォルトのシェルを以下のように変更することができます

FROM ocaml/opam 

WORKDIR /workdir 

RUN opam init --auto-setup 
RUN opam install --yes ocp-indent 
SHELL ["/bin/bash", "-lc"] 
RUN ocp-indent --help 

ENTRYPOINT ["/bin/bash", "-lc", "ocp-indent"] 
CMD ["--help"] 
+0

'SHELL'行は、' RUN'行の上に行く必要があるように見えます。ありがとう。 – user1795832

+0

これらの 'docker run'コマンドをどのイメージで実行すべきですか? SHELLをWORKDIRの上に置いてイメージを作成しましたが、このエラーのためにコンテナ内で実行されません: 'デーモンからのエラー応答:ociランタイムエラー:container_linux.go:262: ocp-indent \ ":実行ファイルが$ PATHに見つかりません" – user1795832

+0

@ user1795832、私はちょうど 'ENTRYPOINT ["/bin/bash "、" -lc "、" ocp-indent "]'を使っていたはずです。 Answer –

関連する問題