将主机环境变量传递给dockerfile

时间:2017-08-01 14:23:20

标签: docker environment-variables dockerfile centos7

如何将主机环境变量(如用户名和主机名)传递给dockerfile?

例如,如果我的用户名为taha

echo $USER
taha

如何编写Docker文件以获得相同的输出?

FROM centos:centos7   
ARG myuser=$USER  
CMD echo $myuser

4 个答案:

答案 0 :(得分:9)

我遇到了同样的问题。我的解决方案是在docker-compose.yml中提供变量,因为yml支持使用环境变量。

在我看来,这对我来说是最有效的方式,因为我不喜欢在{1}}

之类的命令行中反复输入它

声明docker run -e myuser=$USER . . .将不起作用,在容器中,ENV myuser=$USER将设置为$myuser

所以你的docker-compose.yml看起来像这样:

null

可以使用短命令version: '3' services: app: build: context: . dockerfile: Dockerfile environment: - "myuser=${USER}"

运行

要检查是否已应用变量,请运行docker-compose up以列出容器中的所有变量。

答案 1 :(得分:4)

启动docker容器时,可以使用-e选项传递环境变量,如下所示:

docker run -it <image> -e USER=$USER /bin/bash 

答案 2 :(得分:0)

我有一个类似的用例,我想能够为图像指定一个版本。这有一些额外的要求,您必须指定ARG before the FROM

首先我们在IMAGE_VERSION中指定Dockerfile,我还包含一个我们也可以传递的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 compose文档:

添加构建参数,它们是只能在构建过程中访问的环境变量。

例如,您可以在docker-compose.yml中添加它们:

version: '3'
services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        "myuser=${USER}"
        IMAGE_VERSION

然后,只要您在环境中设置了IMAGE_VERSION,它就会通过。

答案 3 :(得分:-2)

您需要使用dockerfile中的ENV设置

ENV myuser=$USER

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