【问题标题】:Console.ReadLine inside a docker containerdocker 容器内的 Console.ReadLine
【发布时间】:2020-05-05 00:02:42
【问题描述】:

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

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
        }

    }

【问题讨论】:

  • 感谢您的评论。然而,这并不能回答我的问题,我无法在使用 console.readline 时从我的应用程序创建图像,但他们已经创建了它,只是试图以交互模式运行容器

标签: c# docker console-application docker-container


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回复。我检查了代码,您可能使用的是 .net core 3.0,这就是为什么您在运行时遇到一些问题:3.1-nanoserver-1903。尽管如此,我将项目降级到 .net core 3.0 并使用了您的 dockerfile 配置,但仍然遇到相同的异常:( (
猜你喜欢
  • 2022-10-04
  • 1970-01-01
  • 2018-06-27
  • 2023-03-27
  • 2018-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多