【问题标题】:How to filter docker client environment variables into a docker run command?如何将 docker 客户端环境变量过滤到 docker run 命令中?
【发布时间】:2016-09-08 04:14:06
【问题描述】:

假设在我的 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 命令中?

【问题讨论】:

    标签: bash docker environment-variables


    【解决方案1】:

    你可以这样做:

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

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

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

    &lt;(...) 构造是用于进程替换的 bash 语法。从 bash(1):

    在支持命名管道 (FIFO) 或 /dev/fd 命名打开文件的方法。它采用 (list) 的形式。这 进程列表在其输入或输出连接到 FIFO 或某个文件的情况下运行 /dev/fd.此文件的名称作为参数传递给当前命令 扩展的结果。

    【讨论】:

      【解决方案2】:

      简单的:

      docker run -e $(set | echo $(sed -n "/^DOC.*_CON.*_VAL.*/s/^/-e /p")" ")--name container_name dockerhub_id/image_name
      
      • $( ) -- 运行命令
      • set -- 列出环境变量
      • sed -n -- 不打印
      • 匹配字符串^DOC._CON._VAL.*
      • 用“-e”代替行首字符
      • p -- 打印匹配项
      • " " -- 在结果之间添加空格

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

      验证此方法有效。

      【讨论】:

        【解决方案3】:
        env | { sed -n '/DOCKER/s/^/-e /p' ; echo myimage; } | xargs docker run
        

        【讨论】:

        • 这实际上是行不通的。如果您的最终命令是 xargs docker run myimage,则 xargs 的结果将是 docker run myimage -e ...,这不会执行您想要的操作。此外,在任何情况下,包含空格的变量都会导致这种情况发生,如果您希望进行交互式 docker 会话,那么您将不走运。
        • @larsks 感谢您的反馈。我实际上并没有使用 docker,但我已经修改了我的答案,以考虑到-e 选项之后可能会出现更多参数。
        • 这仍然会失败,因为xargs-e DOCKER_CONTAINER_VALUE_C=networksettingD -e DOCKER_CONTAINER_VALUE_G=arbitrarySettingH 作为单个参数传递,从而导致错误。
        • @larsks 第三次幸运?
        猜你喜欢
        • 2022-08-16
        • 2018-04-15
        • 2015-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-18
        • 1970-01-01
        相关资源
        最近更新 更多