Eit*_*tan 8 nuget docker-compose asp.net-core
我正在使用docker-compose在C#.NET核心(VS 2017)中编写,使用build for linux容器.
当我构建图像(或发布)时,由于nuget的使用,总是引用互联网.
遇到最后一个错误(我在nuget上停止了停机,但无论如何 - 任何停机时间都不应导致构建/发布中的异常).
/usr/share/dotnet/sdk/2.1.503/NuGet.targets(114,5):错误:无法加载源https://api.nuget.org/v3/index.json的服务索引....
我想构建图像,即使nuget已关闭,甚至没有intet连接
yml文件如下所示:
services:
myProj:
image: my_proj
build:
context: ./all_projects/base_solution/
dockerfile: myProj/Dockerfile
Run Code Online (Sandbox Code Playgroud)
似乎"dotnet publish ..."命令从Internet恢复恢复.
如果我使用--no-restore运行发布,代码未编译,但我想从我自己的预构建计算机中恢复nuget包.
我该怎么做?没有互联网连接?为什么我要依靠互联网来恢复每个版本的nuget?
为什么我不能从我自己的预构建图像中恢复nuget包,而不是总是?!从nuget获取(实际上nuget包在我的代码中偶尔不会改变).
我可以从nuget复制文件夹,而不是使用"COPY"命令吗?
我做了以下事情:
从'common'项目构建图像,该项目使用所有nuget包.
在内置图像中为新的其他图像添加引用,如下所示:
创建一个新的公共图像:#没有运行时.
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY TestDock/TestDock.csproj TestDock/
FROM build AS publish
RUN dotnet publish TestDock.csproj -c Release -o /app
Run Code Online (Sandbox Code Playgroud)
在原始图像:FROM microsoft/dotnet:2.1-runtime AS基础WORKDIR/app
# FROM microsoft/dotnet:2.1-sdk AS build do:
FROM my_common_image AS build
WORKDIR /src
COPY TestDock/TestDock.csproj TestDock/
# Added the following. I tried to copy all, but this doesn't help.
# I persume I can copy part of the common build.
COPY --from=build /app /app
COPY --from=build /src /src
COPY --from=build /usr /usr
FROM build AS publish
RUN dotnet publish TestDock.csproj --no-restore --no-dependecies -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "TestDock.dll"]
Run Code Online (Sandbox Code Playgroud)
我试图添加一个中间图像,Dockerfile如下:
# This image is base image for all dockers (no need runtime)
# docker build . -f DockerFile_Common -t docker_common
FROM microsoft/dotnet:2.1-sdk AS build
COPY . .
WORKDIR /src/myProj
FROM build AS publish
RUN dotnet publish myProj.csproj -c Release -o /app
RUN dotnet pack /src/myProj.csproj -c Release -o /app
Run Code Online (Sandbox Code Playgroud)
并在我的图像中使用它(我不想使用互联网构建),而不是:
FROM microsoft/dotnet:2.1-sdk AS build
Run Code Online (Sandbox Code Playgroud)
我做了:
FROM docker_common AS build
Run Code Online (Sandbox Code Playgroud)
当我将workdir设置为解决方案文件夹时,我还尝试添加以下行:"RUN dotnet publish ...",并标记"Microsoft Visual Studio Offline Packages"(unmark默认为"nuget.org").
不过,上述情况并不正确.
如果不使用互联网,您可以按照以下步骤操作。
需要在Visual Studio中发布,如下:
(或者在命令行中发布)。
dotnet publish myProj.csproj -c Release /p:PublishProfile=Properties\PublishProfiles\
<myprofile>.pubxml /p:PublishDir=<proj_folder>\bin\Release\netcoreapp2.1\publish
Run Code Online (Sandbox Code Playgroud)
或者在构建后事件中添加如下行:
dotnet publish $(ProjectDir)$(ProjectName).csproj -c $(Configuration)
/p:PublishProfile=Properties\PublishProfiles\PublishProfile.pubxml
/p:PublishDir=$(TargetDir)publish --no-build
Run Code Online (Sandbox Code Playgroud)
...并且在 Dockerfile 中,我只是需要从相关发布目录执行“COPY ...”!
FROM microsoft/dotnet:2.1-runtime
COPY MyProjectFolder/bin/Release/netcoreapp2.1/publish /app
WORKDIR /app
ENTRYPOINT ["dotnet", "myproject.dll"]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
360 次 |
最近记录: |