Образ Docker не работает - возможно, неправильные пути при сборке - PullRequest
0 голосов
/ 20 января 2019

Я пытаюсь переместить проект ASP.NET Core в контейнер Docker Linux, однако я не могу создать правильный образ. Когда я создаю dockerfile по умолчанию (через VisualStudio Add -> DockerSupport), он устанавливает пути для COPY ко всем проектам. Однако, когда я запускаю Docker build -t. это выскакивает ошибка "нет такого файла или каталога". Я пытался придерживаться официальной документации по докеру с перемещением ядра asp.net в контейнеры докеров, и вот код, которым я закончил:

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ./ ./
RUN dotnet restore "myproject.csproj"
COPY . .
WORKDIR "/src/myproject"
RUN dotnet build "myproject.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "myproject.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "myproject.dll"]

Это команда, которую я использую для создания образа:

docker build -t myapp -f myproject/Dockerfile .

Я собираю его из родительского каталога, потому что когда я использовал текущий рабочий каталог, он не находил все файлы .csproj. Когда я запускаю этот образ, он не работает - я знаю, что есть неправильные пути, однако я понятия не имею, где ошибка в логике. Текущая ошибка: «Программа не содержит статический метод« Main », подходящий для точки входа» и «Обнаружена фатальная ошибка. Библиотека« libhostpolicy.so », необходимая для выполнения приложения, не найдена в« / app / ». Не удалось запустить как автономное приложение. Если это должно быть приложение, зависящее от фреймворка, укажите соответствующий фреймворк в /app/myproject.runtimeconfig.json"

.

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Не следует указывать RUN dotnet build "myproject.csproj" -c Release -o /app с -o /app, который будет выводиться в ту же папку со слоем build.

Попробуйте

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["myproject/*.csproj", "myproject/"]
RUN dotnet restore "myproject/myproject.csproj"
COPY . .
WORKDIR /src/myproject
RUN dotnet build "myproject.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "myproject.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "myproject.dll"]
0 голосов
/ 21 января 2019

Попробуйте следующее на основе этой документации заменить myproject на имя проекта

FROM microsoft/dotnet:sdk 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/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", “myproject.dll"]

Затем соберите и запустите с помощью следующих команд:

docker build -t myproject .
docker run -d -p 8080:80 --name myapp myproject
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...