gpt4 book ai didi

docker - asp.net核心 docker 问题

转载 作者:行者123 更新时间:2023-12-02 17:56:27 24 4
gpt4 key购买 nike

我是 docker 新手,我开发了一个简单的 asp.net 核心 webapi 解决方案,它使用来自私有(private)存储库的 NuGet 包。

dotnet restore 命令为位于解决方案内的 nuget.config 文件中引入的私有(private)存储库中的缺失 NuGet 包返回错误。

有谁知道我的配置和 dockerfile 有什么问题?

Dockerfile

FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "aspnetcoretssl.dll"]

.dockerignore
bin\
obj\

另外我在解决方案的根目录中有一个 nuget.config 文件,如下所示
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="myrepo" value="\\path\to\the\nuget_packages_folder" />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
</packageSources>
</configuration>

但我收到以下消息

docker build -t aspnetcoretssl 。

error NU1101: Unable to find package TestContracts. No packages exist with this id in source(s): nuget.org Generating MSBuild file /app/obj/aspnetcoretssl.csproj.nuget.g.props.

The command '/bin/sh -c dotnet restore' returned a non-zero code: 1

最佳答案

好像有两个问题

  • NuGet.config 文件位于您的解决方案目录中,但 Dockerfile 位于项目文件夹中。这意味着 COPY . ./不会将 NuGet.config 复制到 Docker 容器中
  • 即使您有 NuGet.config 文件,“myrepo”源也是 Docker 容器内的无效文件路径。


  • 这是无效的,因为这是 Windows 网络文件路径,但您的容器在 Linux 上运行。

    为了解决这个问题,我会推荐以下方法。
  • 将 Dockerfile 移至解决方案目录,或将 NuGet.config 移至项目目录。
  • 添加第二个名为 NuGet.linux.config 的文件,并在非 Windows 上构建时指向该文件。在 Linux 上构建时,使用 RestoreConfigFile 属性指向此文件。如果您已将 NuGet.config 移至项目目录,请将这些行添加到您的 aspnetcoretssl.csproj文件可以工作:
    <PropertyGroup>
    <RestoreConfigFile Condition="'$(OS)' != 'Windows_NT'">NuGet.linux.config</RestoreConfigFile>
    <RestoreConfigFile Condition="'$(OS)' == 'Windows_NT'">NuGet.config</RestoreConfigFile>
    </PropertyGroup>
  • \\path\to\the\nuget_packages_folder 创建网络挂载至Z:\
  • NuGet.linux.config ,将“myrepo”更改为<add key="myrepo" value="/nuget/myrepo" />
  • 将此驱动器安装到容器中。这是通过 --volume 完成的。 docker-run 上的参数。 docker run --volume Z:/:/nuget/myrepo
  • 关于docker - asp.net核心 docker 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48250568/

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