web-dev-qa-db-ja.com

Dockerfileがローカルファイルまたはプライベートnugetサーバーを認識できない

コンテナー技術で.netコアWeb APIを開始しようとしています。ドッカーを使用して。

環境= Windows 10、Visual Studio

Dockerバージョン:

クライアント:

バージョン:17.12.0-ce

APIバージョン:1.35

Goバージョン:go1.9.2

Gitコミット:c97c6d6

ビルド:2017年12月27日水20:05:22

OS/Arch:windows/AMD64

サーバ:

エンジン:

バージョン:17.12.0-ce

APIバージョン:1.35(最小バージョン1.12)

Goバージョン:go1.9.2

Gitコミット:c97c6d6

ビルド:2017年12月27日水曜日20:12:29

OS/Arch:linux/AMD64

実験的:真

私のNuget.Configファイル:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>


<add key="nuget.org" value="https://api.nuget.org/v3/index.json" 
protocolVersion="3" />


<add key="Private" 
value="http://My_Private_Nuget_Server" />


</packageSources>
<packageRestore>
<add key="enabled" value="True" />
<add key="automatic" value="True" />
</packageRestore>
<bindingRedirects>
<add key="skip" value="False" />
</bindingRedirects>
<packageManagement>
<add key="format" value="0" />
<add key="disabled" value="True" />
</packageManagement>


<apikeys>
<add key="https://www.nuget.org" value="Some_Long_Value" />
</apikeys>


<disabledPackageSources />
</configuration>

私の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", "MailAlertWebApiWithEF.dll"]

Windows 10マシンでLinuxコンテナーを使用しています。 Visual Studio 17に.netコアプロジェクトがあります。ドッカーサポートを追加してVS 17から実行すると、すべてが正常に動作します。 APIはコンテナー内で立ち上がりますが、VSを閉じても機能しません。ただし、イメージとコンテナーをVSから独立させるためにdockerfileをカスタマイズしようとすると、プライベート.dllが原因でエラーが発生します。

私のプロジェクトには、プライベートnugetサーバーからの.dllがあります。私のプライベート.dllなしで試した場合、イメージを作成できます。しかし、私は.dllが必要です。 Dockerは私にこのエラーを与えます:

MailAlertWebApiWithEF.csproj:エラーNU1101:パッケージWebApi.Utilsが見つかりません。ソースにこのIDのパッケージはありません:nuget.org

このエラーを検索しました。問題の原因はNuget.Configファイルのようです。しかし、プライベートnugetサーバーがそこにあるので、私にとっては良さそうです。解決策を検索すると、Linuxマシンでは常に矢印が表示されますが、Windowsを使用します。

1-)そのため、VS 17でプロジェクトを開始できる場合、nuget.configファイルは正しい形式です。私のプライベートnugetサーバーを見ることができます。正しい?それなら、どうしてドッカーはそれを見ないのですか?

助けてください

9
rmznbyk 1

コンテナ内でdotnetコマンドを実行してカスタムフィードを見つけるには、nuget.configファイルもコンテナにコピーする必要があります。

これを行うには、nuget.configファイルをプライベートフィードとともにプロジェクトフォルダに追加し、このファイルをコンテナにコピーする追加のCOPYステップを追加します。

例(Dockerfile):

WORKDIR ...
COPY NuGet.Config /
COPY ... ...
11
Martin Ullrich

private repositoriesまたはcustom nuget feedsおよびRUN dotnet restore失敗であり、ここであなたができることは次のとおりです:

該当する場合のみ:NuGet.Configにプライベートリポジトリのエンドポイントと認証情報が含まれている場合、

1)システムのNuGet.Configを、.csprojectと同じルートレベルのプロジェクトフォルダーにコピーします。

2)Dockerファイルに、パッケージを復元する直前に次のステートメントを入力します。

COPY ./NuGet.Config ./

3)その後、次のようにdotnet restoreコマンドに構成ファイルの場所を追加します。

RUN dotnet restore <CS_project_name>.csproj --configfile ./NuGet.Config

4)次に、やりたいことの残りを実行します。

5)エントリポイントの前、または他のコンテナーにコピーする前の最後(マルチステージビルドの場合)では、NuGet.Configを削除するを使用することを望まないため、これをお勧めします。ポッド/コンテナで見られる

RUN rm ./NuGet.Config
9
Paras Patidar