2015-12-16 10 views
11

Docker 1.9では、ドッカーファイルに引数を渡すことができます。リンクを参照してください:https://docs.docker.com/engine/reference/builder/#argARG値をENTRYPOINTに渡す方法は?

どのように私はENTRYPOINT命令内で同じarugmentsを渡すことができますか?

マイdockerfileがENTRYPOINTは、上記dockerfileでコンテナを作成しながら、私はエラーを取得しています

を開始/tmp/folder-$Version/sample.sh

ARG $バージョン= 3.1
を持っています。 ENTRYPOINT命令内で引数を指定する正しい方法は何ですか?

+0

ですから、たとえば、オプションをお願い '--entrypoint = /:しかし、あなたはENVの値、あなたがENTRYPOINTでそれを使用することができ、その方法として、あなたのARGを使用することができますroot/run.sh'? – BMW

答えて

0

あなたはより大きな式の中の変数を使用しているので、それはカーリーbraketsに囲まれての恩恵を受ける可能性があります

ENTRYPOINT /tmp/folder-${Version}/sample.sh start 
2

ARGの構文は$を省略すべきです。

ARG $Version=3.1の代わりに、ARG Version=3.1を試してください。

6

短い答え:あなたはENV

ARGENV両方を使用する必要がENTRYPOINTまたはCMDで展開されていません。 (https://docs.docker.com/engine/reference/builder/#environment-replacement)ただし、ENVは環境の一部として渡されるため、実行時に使用できるため、シェルは展開できます。 (これはENTRYPOINTまたはCMDの配列形式を使用することはできません。)ここで

は例です、あなたは ENTRYPOINTARGを使用することはできません

$ cat arg/Dockerfile 
FROM debian:jessie 
ARG FOO=bar 
ENTRYPOINT echo ${FOO:-foo} 
$ sudo docker build arg 
Sending build context to Docker daemon 2.048 kB 
Step 1 : FROM debian:jessie 
---> f50f9524513f 
Step 2 : ARG FOO=bar 
---> Using cache 
---> 2cfdcb514b62 
Step 3 : ENTRYPOINT echo ${FOO:-foo} 
---> Running in 21fb9b42c10d 
---> 75e5018bad83 
Removing intermediate container 21fb9b42c10d 
Successfully built 75e5018bad83 
$ sudo docker run 75e5018bad83 
foo 
$ sudo docker run -e FOO=bas 75e5018bad83 
bas 
$ sudo docker build --build-arg FOO=bas arg 
Sending build context to Docker daemon 2.048 kB 
Step 1 : FROM debian:jessie 
---> f50f9524513f 
Step 2 : ARG FOO=bar 
---> Using cache 
---> 2cfdcb514b62 
Step 3 : ENTRYPOINT echo ${FOO:-foo} 
---> Using cache 
---> 75e5018bad83 
Successfully built 75e5018bad83 
$ sudo docker run 75e5018bad83 
foo 
$ cat env/Dockerfile 
FROM debian:jessie 
ARG FOO=bar 
ENV FOO=${FOO} 
ENTRYPOINT echo ${FOO:-foo} 
$ sudo docker build env 
Sending build context to Docker daemon 2.048 kB 
Step 1 : FROM debian:jessie 
---> f50f9524513f 
Step 2 : ARG FOO=bar 
---> Using cache 
---> 2cfdcb514b62 
Step 3 : ENV FOO ${FOO} 
---> Running in f157a07c1b3e 
---> a5e8c5b65a17 
Removing intermediate container f157a07c1b3e 
Step 4 : ENTRYPOINT echo ${FOO:-foo} 
---> Running in 66e9800ef403 
---> 249fe326e9ce 
Removing intermediate container 66e9800ef403 
Successfully built 249fe326e9ce 
$ sudo docker run 249fe326e9ce 
bar 
$ sudo docker run -e FOO=bas 249fe326e9ce 
bas 
$ sudo docker build --build-arg FOO=bas env 
Sending build context to Docker daemon 2.048 kB 
Step 1 : FROM debian:jessie 
---> f50f9524513f 
Step 2 : ARG FOO=bar 
---> Using cache 
---> 2cfdcb514b62 
Step 3 : ENV FOO ${FOO} 
---> Running in 6baf31684b9f 
---> 8f77ad154798 
Removing intermediate container 6baf31684b9f 
Step 4 : ENTRYPOINT echo ${FOO:-foo} 
---> Running in 892ac47cabed 
---> fa97da85bf8a 
Removing intermediate container 892ac47cabed 
Successfully built fa97da85bf8a 
$ sudo docker run fa97da85bf8a 
bas 
$ 
+0

実行時に環境変数が使用できるのはなぜですか? 「実行プロセス」は構築プロセスの子プロセスですか? –

1

ブレイクミッチェルサイス同様。

Dockerfile

ARG my_arg 
ENV my_env=$my_arg 

ENTRYPOINT echo $my_env 
関連する問題