【问题标题】:Assignment of environment variables in Dockerfile as a result of a command作为命令的结果在 Dockerfile 中分配环境变量
【发布时间】:2020-07-10 12:47:23
【问题描述】:

我正在尝试将 powershell 命令的结果分配给 MY_VAR 环境变量。我尝试了几种方法,但我无法让变量获取操作的值。如果我按如下方式分配变量,我得到的值就是字面上的命令。

ARG MY_ARG="VALUE"

ENV MY_VAR=[Convert]::ToBase64String([system.Text.Encoding]::UTF8.GetBytes($MY_ARG))

ENV MY_VAR2=$([Convert]::ToBase64String([system.Text.Encoding]::UTF8.GetBytes($MY_ARG)))

当我将值检查到容器中时,我得到了这个:

Get-Childitem -Path Env:MY_VAR*

Name                           Value                                                                                                                                              
----                           -----                                                                                                                                              
MY_VAR                         [Convert]::ToBase64String([system.Text.Encoding]::UTF8.GetBytes(VALUE))  
MY_VAR2                        $([Convert]::ToBase64String([system.Text.Encoding]::UTF8.GetBytes(VALUE)))

我的容器的基础是 Windows Server Core,我的 shell 是 powershell。

【问题讨论】:

    标签: powershell docker environment-variables dockerfile


    【解决方案1】:

    请参阅this SO post,它包含几个解决方法来实现您想要的。

    ENV 将 value 视为简单的文本字符串。

    更新:

    根据answers and comments here

    1) RUN $profile 会显示环境配置文件的位置。更加熟悉这个文件。

    2) 尝试RUN $env.MY_VAR = [Convert]::ToBase64String([system.Text.Encoding]::UTF8.GetBytes($MY_ARG)) >> $profile 或其他方式将命令附加到文件中。 我对 powershell 不够熟悉,因此请注意,您可能会稍微修复该命令。 (用正确的命令评论,我会为下一个观众修复它。)

    3) 尝试读取容器中的 MY_VAR。如果一切正常,那么万岁!,否则检查 $profile 是否确实获得了设置变量的正确字符串。

    【讨论】:

    • 谢谢!我已经尝试了其中一些,但无法成功转换为 powershell。我的容器是基于 Windows 的。
    • 我需要在构建映像期间可用的变量。恐怕该方法仅适用于容器。
    • 我没有足够的关于 powershell 的信息,但是 linux 模拟 (/etc/bash.bashrc) 可以很好地用于构建使用。该变量在每个构建步骤(在每个中间容器中)从文件中初始化,因此您可以在构建期间使用 env var 作为使用 ENV 定义的 env var。
    猜你喜欢
    • 2016-04-15
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 2017-03-18
    相关资源
    最近更新 更多