これは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"]
'run'が動作するのはなぜか分かりませんが、' ocp-インデント? – kichik
? 'Run'? –
user1795832
うん。おそらく '/ bin'や'/usr/bin'にあります。 – kichik