Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何将docker客户端环境变量过滤到docker运行命令中?_Bash_Docker_Environment Variables - Fatal编程技术网

Bash 如何将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' -

假设在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' -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第三次幸运?