Console.ReadLine внутри docker контейнера - PullRequest
1 голос
/ 18 января 2020

У меня есть docker контейнер консольного приложения, которое должно получить значение от пользователя с помощью команды Console.Readline, затем продолжает свою работу. Однако всякий раз, когда я использую команду Console.Readline внутри myapplication и пытаюсь создать из нее образ, я получаю следующее исключение:

System.IO.IOException: 'Дескриптор недопустим.'

это мой docker файл:

FROM mcr.microsoft.com/dotnet/core/runtime:3.1-nanoserver-1903 AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-nanoserver-1903 AS build
WORKDIR /src
COPY ["DockerSample/DockerSample.csproj", "DockerSample/"]
RUN dotnet restore "DockerSample/DockerSample.csproj"
COPY . .
WORKDIR "/src/DockerSample"
RUN dotnet build "DockerSample.csproj" -c Release -o /app/build

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

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

это мой код в консольном приложении:

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            var input=Console.ReadLine();
           //do something with my input
        }

    }

1 Ответ

0 голосов
/ 18 января 2020

Я пытался воспроизвести ваше исключение, но у меня была другая проблема с

mcr.microsoft.com/dotnet/core/runtime:3.1-nanoserver-1903

Я заменил его на

mcr.microsoft.com/dotnet/core/runtime:3.0

Мой Dockerfile теперь выглядит так

FROM mcr.microsoft.com/dotnet/core/runtime:3.0 AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
WORKDIR /src
COPY ["ConsoleApp2/ConsoleApp2.csproj", "ConsoleApp2/"]
RUN dotnet restore "ConsoleApp2/ConsoleApp2.csproj"
COPY . .
WORKDIR "/src/ConsoleApp2"
RUN dotnet build "ConsoleApp2.csproj" -c Release -o /app/build

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

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

Мой код в ConsoleApp2 выглядит следующим образом

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Console.WriteLine("Input:");     
            string input = Console.ReadLine();
            Console.WriteLine("Output:");
            Console.WriteLine(input);
        }
    }

Я использовал следующие команды для Docker, но я не получил никакого исключения. И приложение отлично работает.

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