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)