【问题标题】:Import-Module in the Docker PowerShell imageDocker PowerShell 映像中的 Import-Module
【发布时间】:2017-11-27 00:12:54
【问题描述】:

我正在构建一个基于 microsoft/powershell:ubuntu16.04 的 Docker 映像。它可以正确构建,没有任何错误,但是当我去使用它时,它没有我在 Dockerfile 中声明的导入模块(这是一个 psd1 文件,来自 GitHub 存储库中克隆的镜像。

我也尝试过简单地导入 Microsoft 的 powershell 管理(见下文),但它也没有被导入。我以交互方式运行图像并一一运行命令,并且所有导入都很好,所以我不知道为什么它不能通过 Dockerfile 构建本身工作。

FROM microsoft/powershell:ubuntu16.04
WORKDIR /workdir

RUN pwsh -command "Import-Module Microsoft.PowerShell.Management"

CMD [ "pwsh", "-Command", "Get-Module" ]

psd1 文件示例

FROM microsoft/powershell:ubuntu16.04

RUN apt-get update && apt-get install git -y
RUN git clone https://github.com/DTW-DanWard/PowerShell-Beautifier.git
RUN cp -a PowerShell-Beautifier/src/. /opt/microsoft/powershell/6.0.0-rc/Modules

ENTRYPOINT [ "pwsh", "-c" ]
CMD [ "Get-Help", "Edit-DTWBeautifyScript" ]

【问题讨论】:

    标签: powershell docker dockerfile


    【解决方案1】:

    因为它发生在错误的“上下文”中。为此,您需要在 1 个 powershell 会话中使用这两个命令:

    pwsh -command "Import-Module Microsoft.PowerShell.Management; Get-Module"
    

    否则它会创建一个运行该命令的层,但是当 powershell 停止时,所有导入都消失了(当该层完成时,它会关闭容器,因此它不会保留会话状态,只保留操作系统状态)。

    我的 dockerfile(工作示例):

    FROM microsoft/powershell:ubuntu16.04
    RUN pwsh -c "Install-Module AzureRM.netcore -Force"
    
    CMD [ "pwsh" ]
    

    【讨论】:

    • 我想我明白你的解释,但不明白你的建议。在 RUN 语句的末尾添加 Get-Module 有什么不同呢?我仍然尝试了它并没有得到我想要的结果。我基本上希望导入的模块在映像中可用,因此当它作为容器运行时,我可以使用该导入模块中的命令。
    • 这应该在CMD而不是RUN
    • 好的,知道了。因此,当我将Microsoft.PowerShell.Management 替换为要导入的psd1 文件时,它会显示[: missing]。当我通过docker run -it [image name] Import-Module .\[module file name].psd1 手动运行它时,它说没有加载指定的模块,因为在任何模块目录中都没有找到有效的模块文件。我知道它在那里,因为我运行了加载文件并列出文件的中间图像,它们就在那里。
    • 我的假设是它在我的本地寻找它,而不是在它应该做的图像/容器中寻找它,但不知道该怎么做。
    • 不,这是不可能的。老实说,您的整个方法是错误的,您应该只使用 psmodulepath 下的任何文件夹。在这种情况下你甚至不需要加载它,它会自动加载
    猜你喜欢
    • 2011-09-18
    • 1970-01-01
    • 2021-01-14
    • 2021-09-13
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    相关资源
    最近更新 更多