11

Dockerfile にこれがあるとします。

ARG FOO=1
ENTRYPOINT ["docker.r2g", "run"]

上記を次のようにビルドします。

docker build -t "$tag" --build-arg FOO="$(date +%s)" .

次のような方法はありますか:

ENTRYPOINT ["docker.r2g", "run", ARG FOO]  // something like this

フェーズdocker run中の代わりに引数を渡すこともできると思いますか?docker build

4

2 に答える 2

5

この簡単なテクニックは私にとってうまくいきます:

FROM node:9
# ...
ENTRYPOINT dkr2g run "$dkr2g_run_args"

次に、コンテナを次のように起動します。

docker run \
    -e dkr2g_run_args="$run_args" \
    --name "$container_name" "$tag_name"

env 変数をコマンド ライン引数に分散させると、いくつかのエッジ ケースの問題が発生する可能性がありますが、ほとんどの場合は機能するはずです。

ENTRYPOINT は次のように機能します。

ENTRYPOINT ["foo", "--bar", "$baz"]  # $baz will not be interpreted

またはそのように:

ENTRYPOINT foo --bar $baz

後者が好まれない理由はわかりませんが、環境変数の補間/解釈は後者を使用した場合にのみ可能です。参照: ENTRYPOINT 配列で Docker 環境変数を使用するにはどうすればよいですか?

ただし、引数を渡すより堅牢な方法$@は、env 変数の代わりに使用することです。docker runしたがって、次のようにコマンドを使用して --entrypoint をオーバーライドする必要があります。

docker run --entrypoint="foo" <tag> --bar $@

エントリポイントを適切にオーバーライドする方法の正しい構文を学ぶには、確かにそれを調べる必要がありますが、一般的には奇妙です-タグ名の--entrypoint="foo" 前に--entrypoint、タグ名のに引数を配置する必要があります。変。

于 2018-06-19T19:06:44.747 に答える