Веб-API .NET Core 3.0 не запускается в контейнере Docker - PullRequest
1 голос
/ 11 декабря 2019

Я новичок в Docker, пытаюсь получить доказательство того, что концепт-контейнер работает на моей машине. Я сгенерировал проект веб-API .NET Core 3.0 с помощью команды dotnet new webapi. Я добавил конечную точку контроллера, которая просто возвращает строку «Hello World».

using System;
using Microsoft.AspNetCore.Mvc;

namespace DockerHelloWorld.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class ValuesController : ControllerBase
    {

        [HttpGet]
        public string Get()
        {
            return "Hello World!";
        }
    }
}

Я могу успешно построить и запустить этот проект, используя dotnet build и dotnet run соответственно.

Я сейчас пытаюсь заставить это работать в контейнере Docker. Вот мой Dockerfile:

FROM mcr.microsoft.com/dotnet/core/sdk:3.0 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 --framework netcoreapp3 --configuration Release --output out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "DockerHellWorld.dll"]

Это скопировано и немного изменено с здесь .

У меня также есть следующий .dockerignore, на всякий случай, если это уместно:

bin\
obj\

*.md
*.png

Я запускаю следующие команды:

docker build -t dockerhelloworldimage .

docker create -p 3000:80 --name dockerhelloworldcontainer dockerhelloworldimage

docker start dockerhelloworldcontainer

Кажетсякак каждый шаг выполняется на основе вывода docker build. Хэш возвращается после docker create, а "dockerhelloworldcontainer" возвращается после docker run.

Контейнер немедленно останавливается. Я вижу это с помощью команды docker container ls -a.

docker logs dockerhelloworldcontainer имеет следующий вывод: «Не удалось найти никаких установленных .NET Core SDK. Вы имели в виду запускать команды .NET Core SDK? Установите .NET Core SDK из: https://aka.ms/dotnet-download", но я действительно не знаю, как это понять.

Стоит отметить, что я получил нечто очень похожее на эту работу с .NETПриложение Core 2.2.

Есть идеи? Чего мне не хватать?

1 Ответ

2 голосов
/ 12 декабря 2019

Проблема, упомянутая в комментарии @Zied, является опечаткой в ​​имени сборки, которую вы хотите вызвать из команды точки входа.

Если вы исправите это в файле Docker:

# All other content remains the same

ENTRYPOINT ["dotnet", "DockerHelloWorld.dll"]

Вы успешно запустите свой контейнер.

Список запущенных контейнеров: docker ps показывает:

CONTAINER ID        IMAGE                   COMMAND                  CREATED             STATUS              PORTS                                                   NAMES
7dcb5c122445        dockerhelloworldimage   "dotnet DockerHelloW…"   5 minutes ago       Up 4 minutes        0.0.0.0:3000->80/tcp                                    dockerhelloworldcontainer

Теперь это может выглядеть как вводящее в заблуждениесообщение об ошибке, но если вы попытаетесь запустить неправильный исполняемый файл dotnet из CLI (не из docker):

> dotnet MyNonExistingExeName.dll

Вы получите следующее сообщение:

Could not execute because the specified command or file was not found.
Possible reasons for this include:
  * You misspelled a built-in dotnet command.
  * You intended to execute a .NET Core program, but dotnet-.\bin\Debug\netcoreapp3.0\DockerHellWorld.dll does not exist.
  * You intended to run a global tool, but a dotnet-prefixed executable with this name could not be found on the PATH.

IПолагаю, что вторая и третья пули применимы к этому делу. Это означает, что если у вас есть исполняемый файл dotnet (или глобальный / локальный инструмент), вы можете запустить его с помощью команды dotnet, поэтому проблема заключается в том, что ваша команда интерпретируется как несуществующий инструмент или команда и, следовательно,ошибка.

Надеюсь, это поможет!

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