如何将ARG值传递给入口点?
Docker 1.9允许将parameter passing给dockerfile。 请参阅链接: https : //docs.docker.com/engine/reference/builder/#arg
我如何通过ENTRYPOINT指令内的相同的arugments?
我的dockerfile有
ARG $版本= 3.1
入口点/tmp/folder-$Version/sample.sh开始
上面的dockerfile创build容器时出现错误。 请build议什么是在ENTRYPOINT指令内指定参数的正确方法?
简短的回答:你需要使用ENV
ENTRYPOINT
或CMD
中都不扩展ARG
和ENV
。 ( https://docs.docker.com/engine/reference/builder/#environment-replacement )但是,因为ENV
是作为环境的一部分传入的,所以它们在运行时可用,所以shell可以扩展它们。 (这意味着你不能使用ENTRYPOINT
或者CMD
的数组forms。)
这里是一个例子:
$ 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 $
ARG
的语法应该省略$
。
而不是ARG $Version=3.1
,尝试ARG Version=3.1
。
由于您在更大的expression式中使用variables,因此可能受益于被curl的包围物包围:
ENTRYPOINT /tmp/folder-${Version}/sample.sh start
像Blake Mitchell sais一样,你不能在ENTRYPOINT
使用ARG
。 但是你可以使用你的ARG
作为ENV
的值,这样你就可以和ENTRYPOINT
一起使用它:
Dockerfile
ARG my_arg ENV my_env=$my_arg ENTRYPOINT echo $my_env