Dockerfile if else条件与外部参数

我有dockerfile

FROM centos:7 ENV foo=42 

然后我build立它

 docker build -t my_docker . 

并运行它。

 docker run -it -d my_docker 

是否有可能从命令行传递参数,并在Dockerfile中使用它? 我的意思是这样的

 FROM centos:7 if (my_arg==42) {ENV=TRUE} else: {ENV=FALSE} 

并build立这个论点。

  docker build -t my_docker . --my_arg=42 

根据build命令文档 ,有一个参数叫做--build-arg

https://docs.docker.com/engine/reference/commandline/build/#set-build-time-variables-build-arg

用法示例
docker build --build-arg HTTP_PROXY=http://10.20.30.2:1234 .

海事组织,这是你需要:)

它可能不是那么干净,但你可以有你的Dockerfile(条件)如下:

 FROM centos:7 ARG arg RUN if [ "x$arg" = "x" ] ; then echo Argument not provided ; else echo Argument is $arg ; fi 

然后将图像构build为:

docker build -t my_docker . --build-arg arg=45

要么

docker build -t my_docker .

如果你想要dynamic构build图像,那么你应该使用构build脚本来完成。

Docker已经为许多语言提供了SDK,通常包括一个构build调用,可以让你提供一个任意的string或Dockerfile来构build。

例如,用Ruby:

 require 'docker' val = my_arg == 42 ? "TRUE" : "FALSE" # Create an Image from a Dockerfile as a String. Docker::Image.build("FROM centos:7\nENV MY_ENV=" + val)