如何过滤docker客户端环境variables到docker运行命令?

假设在我的docker客户端机器上,我有以下的环境variables:

myValA=B DOCKER_CONTAINER_VALUE_C=networksettingD myValE=F DOCKER_CONTAINER_VALUE_G=arbitrarySettingH 

我想将这些值中的两个传入我正在运行的Docker容器中。 (包含DOCKER_CONTAINER的那些)。

现在我可以手动硬编码,如下所示:

 docker run -e DOCKER_CONTAINER_VALUE_C='networksettingD' -e DOCKER_CONTAINER_VALUE_G='arbitrarySettingH' --name container_name dockerhub_id/image_name 

但是我想让这个过程自动化。

就像是:

 docker run -e ${env | grep "DOCKER_CONTAINER"} ... 

我的问题是: 如何筛选docker客户端环境variables到docker运行命令?

你可以做这样的事情:

 set | grep DOCKER_CONTAINER > env_file docker run --env-file env_file ... 

或者如果你真的想要一个命令行:

 docker run --env-file <(set | grep DOCKER_CONTAINER) ... 

<(...)构造是进程replace的bash语法。 从bash(1)

支持命名pipe道(FIFOs)的系统或命名打开文件的/ dev / fd方法支持进程replace。 它采用<(list)或>(list)的forms。 进程列表在其input或输出连接到FIFO或/ dev / fd中的某个文件时运行。 作为扩展的结果,此文件的名称作为parameter passing给当前命令。

一些简单的像:

 docker run -e $(set | echo $(sed -n "/^DOC.*_CON.*_VAL.*/s/^/-e /p")" ")--name container_name dockerhub_id/image_name 
  • $() – 运行命令
  • 设置 – 列表环境variables
  • sed -n – 不要打印
  • 匹配string^ DOC。 _CON。 _Val。*
  • 将“-e”replace为行字符的开头
  • 打印匹配
  • “” – 在结果之间添加空格

您可以包含完整的匹配string; 我通常只是去最短的…

validation了这个作品。

 env | { sed -n '/DOCKER/s/^/-e /p' ; echo myimage; } | xargs docker run