将主机环境变量传递给 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

https://docs.docker.com/engine/reference/builder/#env

启动 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,它就会通过。