将主机环境变量传递给 dockerfile
Pass host environment variables to dockerfile
如何将主机环境变量(如用户和主机名)传递给 dockerfile?
例如,如果我的用户名是 taha
:
echo $USER
taha
如何编写我的 Docker 文件以获得相同的输出?
FROM centos:centos7
ARG myuser=$USER
CMD echo $myuser
您需要在 dockerfile
中使用 ENV
设置
ENV myuser=$USER
启动 docker 容器时,您可以使用 -e
选项传递环境变量,如下所示:
docker run -it <image> -e USER=$USER /bin/bash
我遇到了同样的问题。我的解决方案是在 docker-compose.yml 中提供变量,因为 yml 支持使用环境变量。
在我看来,这对我来说是最有效的方式,因为我不喜欢在命令行中使用 docker run -e myuser=$USER . . .
之类的东西一遍又一遍地输入它
声明 ENV myuser=$USER
将不起作用,在容器中,$myuser
将设置为 null
。
所以你的 docker-compose.yml 可能看起来像这样:
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
environment:
- "myuser=${USER}"
并且可以运行用短命令docker-compose up
要检查变量是否已被应用,运行 docker exec -it container-name printenv
列出容器中的所有变量。
我有一个类似的 use-case,我希望能够为图像指定一个版本。这有一个额外的要求,您必须指定 ARG
before the FROM
.
首先我们在 Dockerfile
中指定 IMAGE_VERSION
,根据问题我还包含一个 USER
我们也可以传入的参数:
# give it a default of latest
# declare the ARG before FROM
ARG IMAGE_VERSION=latest
FROM centos:${IMAGE_VERSION}
ARG myuser
CMD echo $myuser
然后,从 args
上的 Docker 撰写文档开始:
Add build arguments, which are environment variables accessible only during the build process.
您可以在 docker-compose.yml
中添加这些,例如:
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
args:
"myuser=${USER}"
IMAGE_VERSION
那么只要您在环境中设置了 IMAGE_VERSION
,它就会通过。
如何将主机环境变量(如用户和主机名)传递给 dockerfile?
例如,如果我的用户名是 taha
:
echo $USER
taha
如何编写我的 Docker 文件以获得相同的输出?
FROM centos:centos7
ARG myuser=$USER
CMD echo $myuser
您需要在 dockerfile
中使用ENV
设置
ENV myuser=$USER
启动 docker 容器时,您可以使用 -e
选项传递环境变量,如下所示:
docker run -it <image> -e USER=$USER /bin/bash
我遇到了同样的问题。我的解决方案是在 docker-compose.yml 中提供变量,因为 yml 支持使用环境变量。
在我看来,这对我来说是最有效的方式,因为我不喜欢在命令行中使用 docker run -e myuser=$USER . . .
声明 ENV myuser=$USER
将不起作用,在容器中,$myuser
将设置为 null
。
所以你的 docker-compose.yml 可能看起来像这样:
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
environment:
- "myuser=${USER}"
并且可以运行用短命令docker-compose up
要检查变量是否已被应用,运行 docker exec -it container-name printenv
列出容器中的所有变量。
我有一个类似的 use-case,我希望能够为图像指定一个版本。这有一个额外的要求,您必须指定 ARG
before the FROM
.
首先我们在 Dockerfile
中指定 IMAGE_VERSION
,根据问题我还包含一个 USER
我们也可以传入的参数:
# give it a default of latest
# declare the ARG before FROM
ARG IMAGE_VERSION=latest
FROM centos:${IMAGE_VERSION}
ARG myuser
CMD echo $myuser
然后,从 args
上的 Docker 撰写文档开始:
Add build arguments, which are environment variables accessible only during the build process.
您可以在 docker-compose.yml
中添加这些,例如:
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
args:
"myuser=${USER}"
IMAGE_VERSION
那么只要您在环境中设置了 IMAGE_VERSION
,它就会通过。