gpt4 book ai didi

docker - 如何从 dotnet core 2.2 和 powershell core 创建 docker 镜像?

转载 作者:行者123 更新时间:2023-12-02 18:36:26 34 4
gpt4 key购买 nike

我正在尝试“dockerize”一个 dotnet 标准库,现在我正在使用一个简单的 docker 文件,仅使用 dotnet cli 命令来构建和打包它。

# Build stage
FROM microsoft/dotnet:2.2-sdk as build
ARG Version
WORKDIR /src
COPY . .

RUN dotnet restore
RUN dotnet build -p:Version=$Version -c Release --no-restore

RUN dotnet pack -p:Version=$Version -c Release --include-symbols --no-restore --no-build -o /src/.artifacts

我希望能够从我的 docker 文件运行 powershell 脚本 ci.ps1,但是 dotnet:2.2-sdk 中没有安装 powershell 核心。

是否有关于如何从 dotnet 图像内部运行 powershell 核心脚本的示例?如何从 powershell core 和 dotnet sdk 创建我自己的图像?

谢谢

最佳答案

这是我最近需要实现的确切用例,您确实可以从 .NET Core SDK 图像启动并运行 Powershell Core - 在我的例子中,下面是针对图像 mcr.microsoft.com 完成的/dotnet/core/sdk:2.2-stretch.

完整的解决方案如下所示:

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
...

FROM build AS final
WORKDIR /app
COPY --from=publish /app/publish .
RUN dotnet tool install --global PowerShell \
&& ln -s /root/.dotnet/tools/pwsh /usr/bin/pwsh

地点:

  • dotnet tool install --global PowerShell 将 PowerShell 安装到容器中。然而,仅此一项还不够好,因为正如在@amirtharaj-rs 回答中观察到的那样,除非从 PowerShell 安装目录调用,否则命令 pwsh 将不起作用。例如,您可能会遇到类似的情况:
root@a1d30119664d:/app# pwsh 
bash: pwsh: command not found
  • ln -s/root/.dotnet/tools/pwsh/usr/bin/pwsh 创建一个名为 pwsh 的链接,它指向 PowerShell 的安装位置。这是使 pwsh 可以从任何地方调用的关键行:
root@a1d30119664d:/app# pwsh
PowerShell 6.2.4
Copyright (c) Microsoft Corporation. All rights reserved.

https://aka.ms/pscore6-docs
Type 'help' to get help.

如果上述方法不起作用,那么您可能需要确保在 /usr/bin/pwsh 上设置了执行位。您可以通过运行 ls -l/usr/bin/pwsh 来检查这一点。

如果确实需要设置执行位,请将 chmod 755/root/.dotnet/tools/pwsh 添加到 Dockerfile RUN 命令中。所以完整的 RUN 命令看起来像这样:

FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
...

FROM build AS final
WORKDIR /app
COPY --from=publish /app/publish .
RUN dotnet tool install --global PowerShell \
&& ln -s /root/.dotnet/tools/pwsh /usr/bin/pwsh
&& chmod 755 /root/.dotnet/tools/pwsh

如果有兴趣,我通过这个 Github 问题的讨论历史了解了以上内容:https://github.com/Microsoft/azure-pipelines-agent/issues/1862 .

关于docker - 如何从 dotnet core 2.2 和 powershell core 创建 docker 镜像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55562827/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com