Веб-приложение .NET Core не будет работать в контейнере Docker - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть ванильное веб-приложение .NET Core 2, которое я настроил в JetBrains Rider, и я сразу же начал работать над ним в среде Docker.Для начала я следовал этому руководству:

https://docs.docker.com/engine/examples/dotnetcore/

Я немного изменил его, чтобы придумать следующее:

FROM microsoft/dotnet:latest AS packager

RUN mkdir -p /opt/build
WORKDIR /opt/build

# Copy csproj and restore as distinct layers
COPY *.csproj .
RUN dotnet restore

# Copy everything else and build
COPY . .
RUN dotnet publish -c Release -o bin

# --

# Build runtime image
FROM microsoft/dotnet:runtime AS runtime

RUN mkdir -p /opt/app
WORKDIR /opt/app

COPY --from=packager /opt/build/bin/. .

ENTRYPOINT ["dotnet", "/opt/app/aspnetapp.dll"]

Изображение строится и когда я иду вЗапустив контейнер, я получаю следующий вывод:

dan@mycomputer ~/Desktop/coreapi (master)
$ docker build -t myapp .
Sending build context to Docker daemon  25.09kB
Step 1/12 : FROM microsoft/dotnet:latest AS packager
 ---> e1a56dca783e
Step 2/12 : RUN mkdir -p /opt/build
 ---> Using cache
 ---> 95f9c936d0d1
Step 3/12 : WORKDIR /opt/build
 ---> Using cache
 ---> 64f26c356fd7
Step 4/12 : COPY *.csproj .
 ---> Using cache
 ---> 38a2fb7ca6bb
Step 5/12 : RUN dotnet restore
 ---> Using cache
 ---> 70dbc44d98ae
Step 6/12 : COPY . .
 ---> Using cache
 ---> b1019d53a861
Step 7/12 : RUN dotnet publish -c Release -o bin
 ---> Using cache
 ---> 8e112606633a
Step 8/12 : FROM microsoft/dotnet:runtime AS runtime
 ---> cc240a7fd027
Step 9/12 : RUN mkdir -p /opt/app
 ---> Using cache
 ---> 954f494febc4
Step 10/12 : WORKDIR /opt/app
 ---> Using cache
 ---> b74be941e7dc
Step 11/12 : COPY --from=packager /opt/build/bin/. .
 ---> Using cache
 ---> 4c229192d99b
Step 12/12 : ENTRYPOINT ["dotnet", "/opt/app/aspnetapp.dll"]
 ---> Using cache
 ---> fb6ef4015fba
Successfully built fb6ef4015fba
Successfully tagged myapp:latest
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

dan@mycomputer ~/Desktop/coreapi (master)
$ docker run -p 5001:5001 myapp:latest
Did you mean to run dotnet SDK commands? Please install dotnet SDK from:
  http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409

Приложение не запускается, и я получаю сообщение о том, что мне нужно установить SDK.Что с этим?Разве образ Docker среды выполнения не должен иметь все необходимое для запуска приложения?

1 Ответ

0 голосов
/ 30 сентября 2018

Мне удалось найти решение, изменив ENTRYPOINT для запуска tail -f /dev/null.Оттуда я вошел в контейнер и увидел, что имя бинарного файла корректируется на основе имени вашего проекта, которое мне не было ясно из документации Docker.

Я также обновил свои базовые образы, и это решило мою проблему,Вот мой последний Dockerfile ниже:

FROM microsoft/dotnet:2.1-sdk AS packager

RUN mkdir -p /opt/build
WORKDIR /opt/build

# Copy csproj and restore as distinct layers
COPY *.csproj .
RUN dotnet restore

# Copy everything else and build
COPY . .
RUN dotnet publish -c Release -o bin

# --

# Build runtime image
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS runtime

RUN mkdir -p /opt/app
WORKDIR /opt/app

COPY --from=packager /opt/build/bin/. .

EXPOSE 80

ENTRYPOINT ["dotnet", "/opt/app/coreapi.dll"]
...