2017-09-26 11 views
0

このDocker画像の最後の質問は、Docker image run results in executable not found in pathから続きます。私は、-trunコマンドに含まれているときにDockerイメージが実行されないことを発見しました。したがって、docker run -it <image> --versionは単に出力なしで終了します。しかし、-itを削除したり、-tを削除しても、期待通りのバージョンが出力されます。なぜ、Dockerイメージは-tを含んでいないのですか?

私の質問は、なぜ疑似ttyを使用する-tで動作しないのですか? ocaml/opamイメージが何らかの形で使用されていると、それが起こらないようにしますか?

Dockerfile

FROM ocaml/opam 

SHELL ["/bin/sh", "-lc"] 
LABEL io.whalebrew.name 'ocp-indent' 
LABEL io.whalebrew.config.working_dir '/workdir' 
WORKDIR /workdir 

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

COPY docker-entrypoint.sh /docker-entrypoint.sh 
ENTRYPOINT ["/docker-entrypoint.sh"] 
CMD ["--help"] 

docker-entrypoint.sh

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

答えて

1

あなたは通常通り動作しますshログインオプション(sh -l)疑似TTY(docker run -t)と、出力を削除した場合。

これは、Dockerfileのグローバルな問題のようです。ログイン・プロファイルをロードした後、任意のバイナリコマンドを実行すると、同じように反応します:

→ docker run -ti --entrypoint=/bin/sh 4ead19c50fc7 -c "tail -2 /etc/passwd" 
messagebus:x:104:107::/var/run/dbus:/bin/false 
opam:x:1000:1000:,,,:/home/opam:/bin/bash 

→ docker run -ti --entrypoint=/bin/sh 4ead19c50fc7 -lc "tail -2 /etc/passwd" 
→ 

ベースocaml/opamイメージを実行している容器の中に、ログインシェルを使用してコマンドのに対しOKです:おそらく

→ docker run ocaml/opam sh -lc "tail -2 /etc/passwd" 
messagebus:x:104:107::/var/run/dbus:/bin/false 
opam:x:1000:1000:,,,:/home/opam:/bin/bash 

→ docker run ocaml/opam sh -c "tail -2 /etc/passwd" 
messagebus:x:104:107::/var/run/dbus:/bin/false 
opam:x:1000:1000:,,,:/home/opam:/bin/bash 

opam init --auto-setupステップ画像内のいくつかのDockerの特質を上書きします。 Dockerfileから削除して、コマンドの特定のパスを使用することができます。私はあまりよく知られていないので、これが "やり方"なのかどうかは分かりません。

FROM ocaml/opam 

LABEL io.whalebrew.name 'ocp-indent' 
LABEL io.whalebrew.config.working_dir '/workdir' 
WORKDIR /workdir 

RUN set -uex; \ 
    opam install -vv --yes ocp-indent; \ 
    /home/opam/.opam/4.04.2/bin/ocp-indent --help 

ENTRYPOINT ["/home/opam/.opam/4.04.2/bin/ocp-indent"] 
CMD ["--help"] 
+0

ありがとうございました。どの時点でocaml/opamが4.05.0を更新して使用するので、変更するたびにDockerfileを変更したくないので、エントリーポイントを変更することを躊躇しました。私が試したひとつのことは、悪い考えであれば、 '#!/ bin/sh -l'を'#!/ bin/bash -l'に変更していたと言えます。それはそれを修正するように見えた。 – user1795832

+0

一般的には、 '-l'ソースのランダムなプロファイルファイルではなく、Dockerfileやサポートファイルに表示されるすべての設定を保持しています。 'npm'や' composer'のような他の言語パッケージマネージャは、特定のバージョンに対する一般的な 'bin'リンクをインストールの一部として作成できます。おそらく' opam'にはオプションがありますか?しかしbashが動作すれば...それは動作します:) – Matt

関連する問題