【问题标题】:[Environment]::SetEnvironmentVariable Docker on Windows[环境]::SetEnvironmentVariable Windows 上的 Docker
【发布时间】:2022-10-20 22:18:17
【问题描述】:

在我的 dockerfile 我有这条线

RUN [Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\oracle\instantclient_19_10", "Machine")

我得到了这个返回,即使当我在 PowerShell 中运行上述命令时,一切都“正常工作”

At line:1 char:114
+ ...  = 'SilentlyContinue'; [Environment]::SetEnvironmentVariable(Path, $e ...
+                                                                  ~
Missing ')' in method call.
At line:1 char:114
+ ... SilentlyContinue'; [Environment]::SetEnvironmentVariable(Path, $env:P ...
+                                                              ~~~~
Unexpected token 'Path' in expression or statement.
At line:1 char:118
+ ... ilentlyContinue'; [Environment]::SetEnvironmentVariable(Path, $env:Pa ...
+                                                                 ~
Missing argument in parameter list.
At line:1 char:162
+ ... entVariable(Path, $env:Path + ;C:\oracle\instantclient_19_10, Machine ...
+                                                                 ~
Missing argument in parameter list.
At line:1 char:171
+ ... ntVariable(Path, $env:Path + ;C:\oracle\instantclient_19_10, Machine)
+                                                                         ~
Unexpected token ')' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordEx 
   ception
    + FullyQualifiedErrorId : MissingEndParenthesisInMethodCall

【问题讨论】:

    标签: windows docker powershell


    【解决方案1】:

    这是与此处引用的 Docker 的两种运行命令形式 https://docs.docker.com/engine/reference/builder/#run 的不幸冲突。

    有壳形式:

    RUN(shell 形式,命令在 shell 中运行,在 Linux 上默认为 /bin/sh -c,在 Windows 上默认为 cmd /S /C)

    还有 exec 表格

    RUN ["executable", "param1", "param2"] (执行形式)

    在 Powershell 中,您尝试使用“[Environment]”的命令位于开头,这使 Docker 认为我们处于 exec 形式。

    一个可行的潜在解决方案是

    RUN ["powershell.exe", "[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\oracle\instantclient_19_10", "Machine")"]

    它通过使用 exec 形式而不是 shell 形式来工作,因为这是 json 语法,我们也必须转义所有必要的字符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 2017-01-07
      • 2019-10-14
      • 1970-01-01
      相关资源
      最近更新 更多