コンテナー技術で.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サーバーを見ることができます。正しい?それなら、どうしてドッカーはそれを見ないのですか?
助けてください
コンテナ内でdotnet
コマンドを実行してカスタムフィードを見つけるには、nuget.config
ファイルもコンテナにコピーする必要があります。
これを行うには、nuget.config
ファイルをプライベートフィードとともにプロジェクトフォルダに追加し、このファイルをコンテナにコピーする追加のCOPY
ステップを追加します。
例(Dockerfile):
WORKDIR ...
COPY NuGet.Config /
COPY ... ...
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