Сборка Docker для ядра C # требует подключения к интернету - PullRequest
0 голосов
/ 07 февраля 2019

Я пишу в ядре C # .NET (VS 2017), используя сборку для контейнеров linux, используя docker-compose.

Когда я собираю образ (или публикую), всегда есть ссылка наИнтернет, из-за использования nuget.

Последняя обнаруженная ошибка (которая, как я полагаю, приводит к простоям в nuget, но не имеет значения - любое время простоя не должно приводить к исключению при сборке / публикации).1007 * / usr / share / dotnet / sdk / 2.1.503 / NuGet.targets (114,5): ошибка: невозможно загрузить индекс службы для источника https://api.nuget.org/v3/index.json. ...

Я хочу создать образ, даже если nuget не работает, или даже нет целевого соединения

Файл yml выглядит так:

services:

 myProj:
 image: my_proj
 build:
  context: ./all_projects/base_solution/
  dockerfile: myProj/Dockerfile 

Кажется, что "dotnet publish... "восстановление вызова команды из Интернета.

Если я запускаю команду publish с параметром --no-restore, код не компилируется, но я хочу восстановить пакеты nuget из собственной предварительной сборки моего компьютера..

Как я могу это сделать?Без подключения к интернету?Почему я должен зависеть от интернета для восстановления nuget при каждой сборке?

Почему я не могу восстановить пакет nuget из собственного образа предварительной сборки, и не всегда ?!получить от nuget (на самом деле пакеты nuget иногда не меняются в моем коде).

Могу ли я просто скопировать папку из nuget, не используя команду «COPY»?

Я сделал следующее:

Создание изображения из «общего» проекта, который использует весь пакет 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

И в исходном образе: ИЗ microsoft / dotnet: 2.1-runtime AS base 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"]

Я попытался добавить промежуточный образ с 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

и используйте его в своем изображении (которое я не хочу создавать с использованием Интернета) вместо:

FROM microsoft/dotnet:2.1-sdk AS build

Я сделал:

FROM docker_common AS build

Я также попытался добавить строку: «RUN dotnet publish ...» при установке рабочего каталога в качестве папки решения и пометить «Автономные пакеты Microsoft Visual Studio» (снимите отметку по умолчанию «nuget.org»).

Тем не менее, вышеупомянутое не собирается правильно.

1 Ответ

0 голосов
/ 13 февраля 2019

Если вы не используете Интернет, вы можете выполнить следующие действия.

Для публикации в visual studio необходимо выполнить следующие действия:

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-2.2

(Альтернативная публикация в командной строке).

dotnet publish myProj.csproj -c Release /p:PublishProfile=Properties\PublishProfiles\ 
   <myprofile>.pubxml /p:PublishDir=<proj_folder>\bin\Release\netcoreapp2.1\publish

или добавьте в событие Post-build строку вроде:

dotnet publish $(ProjectDir)$(ProjectName).csproj -c $(Configuration) 
/p:PublishProfile=Properties\PublishProfiles\PublishProfile.pubxml 
/p:PublishDir=$(TargetDir)publish --no-build

... и в Dockerfile я только что сделал с необходимостью сделать "COPY ..." из соответствующего каталога публикации!

FROM microsoft/dotnet:2.1-runtime

COPY MyProjectFolder/bin/Release/netcoreapp2.1/publish /app
WORKDIR /app

ENTRYPOINT ["dotnet", "myproject.dll"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...