Я пишу в ядре 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»).
Тем не менее, вышеупомянутое не собирается правильно.