Bash 如何将docker客户端环境变量过滤到docker运行命令中?
假设在docker客户端计算机上,我有以下环境变量:Bash 如何将docker客户端环境变量过滤到docker运行命令中?,bash,docker,environment-variables,Bash,Docker,Environment Variables,假设在docker客户端计算机上,我有以下环境变量: myValA=B DOCKER_CONTAINER_VALUE_C=networksettingD myValE=F DOCKER_CONTAINER_VALUE_G=arbitrarySettingH 我想将其中两个值传递到我正在运行的Docker容器中。(包含DOCKER\u容器的容器) 现在我可以手动硬编码,如下所示: docker run -e DOCKER_CONTAINER_VALUE_C='networksettingD' -
myValA=B
DOCKER_CONTAINER_VALUE_C=networksettingD
myValE=F
DOCKER_CONTAINER_VALUE_G=arbitrarySettingH
我想将其中两个值传递到我正在运行的Docker容器中。(包含DOCKER\u容器的容器
)
现在我可以手动硬编码,如下所示:
docker run -e DOCKER_CONTAINER_VALUE_C='networksettingD' -e DOCKER_CONTAINER_VALUE_G='arbitrarySettingH' --name container_name dockerhub_id/image_name
set | grep DOCKER_CONTAINER > env_file
docker run --env-file env_file ...
但我想让这个过程自动化
比如:
docker run -e ${env | grep "DOCKER_CONTAINER"} ...
我的问题是:如何将docker客户端环境变量过滤到docker运行命令中?您可以这样做:
docker run -e DOCKER_CONTAINER_VALUE_C='networksettingD' -e DOCKER_CONTAINER_VALUE_G='arbitrarySettingH' --name container_name dockerhub_id/image_name
set | grep DOCKER_CONTAINER > env_file
docker run --env-file env_file ...
或者,如果您确实需要一个命令行:
docker run --env-file <(set | grep DOCKER_CONTAINER) ...
docker run--env file一些简单的东西,比如:
docker run -e $(set | echo $(sed -n "/^DOC.*_CON.*_VAL.*/s/^/-e /p")" ")--name container_name dockerhub_id/image_name
- $()--运行命令
- set--列出环境变量
- sed-n--不打印
- 匹配字符串^DOC.\u CON.\u VAL*
- 用“-e”代替行首字符
- p——打印匹配项
- “”--在结果之间添加空格
您可以包含完整的匹配字符串;我通常只选最短的
验证了这一点。这实际上不起作用。如果您的最后一个命令是xargs docker run myimage
,那么xargs的结果将是docker run myimage-e…
,这将不会执行您想要的操作。另外,在任何情况下,包含空格的变量都会导致此错误,如果您希望进行交互式docker会话,那么您将运气不佳。@larsks感谢您的反馈。实际上我并没有使用docker,但我已经修改了我的答案,以解释以下事实:更多的参数可能会跟随-e
选项。这仍然会失败,因为xargs
将-e docker\u CONTAINER\u VALUE\u C=networksetingd-e docker\u CONTAINER\u VALUE\u G=arbitrarySettingH
作为单个参数传递,导致一个错误。@larsks第三次幸运?