--build-arg
传递它们,并配置你的Dockerfile来接收它们。当你没有为变量提供--build-arg
值,或者在运行时没有使用docker run -e
为环境变量提供值时,Docker将使用你的环境来设置该值。FROM busybox
ARG DOCKER_HOST=${DOCKER_HOST:-""}
ENV DOCKER_HOST=${DOCKER_HOST}
CMD echo "DOCKER_HOST is ${DOCKER_HOST}"
--build-arg DOCKER_HOST
,docker 将会从你的环境中设置该变量:$ echo $DOCKER_HOST
127.0.0.1:2376
$ docker build --build-arg DOCKER_HOST -t test-env:latest .
...
Successfully built 088fabdd9a96
$ docker run test-env
DOCKER_HOST is 127.0.0.1:2376
$ docker build -t test-env:latest .
...
Successfully built ef31d886749b
$ docker run test-env
DOCKER_HOST is
但是你仍然可以在docker run -e DOCKER_HOST
命令中手动传递它到你的环境中:
$ docker run -e DOCKER_HOST test-env
DOCKER_HOST is 127.0.0.1:2376
docker build .
命令时,您的Dockefile所在目录中的所有文件都会被复制到Docker守护程序主机(无论您的DOCKER_HOST指向何处)。构建步骤在此时发生。因此,是的,您需要使用ARGS传递变量,或将本地环境变量复制到一个文件中,该文件将作为构建上下文的一部分复制到Docker主机。DOCKER_HOST
,但具有相同的行为。您的本地文件(构建上下文)是在运行在Mac上的类似Linux的小型操作系统(Xhyve)上构建的。