首页 > 解决方案 > docker 容器内的 Console.ReadLine

问题描述

我有一个控制台应用程序的 docker 容器,它应该使用Console.Readline命令从用户那里获取一个值,然后继续它的工作。但是,每当我在 myapplication 中使用Console.Readline命令并尝试从中创建图像时,都会出现以下异常:

System.IO.IOException:“句柄无效。”

这是我的码头文件:

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
        }

    }

标签: c#dockerconsole-applicationdocker-container

解决方案


我试图重现您的异常,但我遇到了另一个问题

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

推荐阅读