如何过滤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
- 编写.env文件以包含Docker的OAuth凭证
- docker.env文件重复使用声明的variables
- 将docker-compose环境传递给symfonyconfiguration
- inputtensorflow时遇到问题
- 如何为Docker-compose文件设置一个var?
- 使用sudo运行docker-compose时,在docker-compose.yml文件中进行variablesreplace
- 在主pipe中使用docker环境-evariables
- 在AWS Elastic Beanstalk上部署Dockerized Symfony2应用程序
- Dockerfile重写ENVvariables