如何将docker客户端环境变量过滤到docker run命令?

时间:2016-05-12 11:03:37

标签: bash docker environment-variables

假设我的docker客户端计算机上有以下环境变量:

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客户端环境变量过滤到docker run命令?

3 个答案:

答案 0 :(得分:1)

你可以这样做:

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

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

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

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

  

支持命名管道(FIFO)或支持命名管道的系统支持进程替换   / dev / fd命名打开文件的方法。它采用&lt;(list)或&gt;(list)的形式。该   进程列表运行时其输入或输出连接到FIFO或某个文件   的/ dev / FD。此文件的名称作为参数传递给当前命令   扩张的结果。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

简单的事情:

docker run -e $(set | echo $(sed -n "/^DOC.*_CON.*_VAL.*/s/^/-e /p")" ")--name container_name dockerhub_id/image_name
  • $() - 运行命令
  • 设置列表环境变量
  • sed -n - 不打印
  • 匹配字符串^ DOC。 _CON。 _VAL。*
  • 替代&#34; -e&#34;作为行字符的开头
  • p - 打印匹配
  • &#34; &#34; - 在结果之间添加空格

您可以包含完整匹配字符串;我通常只选择最短的...

已验证可行。