假设我的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命令?
答案 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
您可以包含完整匹配字符串;我通常只选择最短的...
已验证可行。