You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于C#/.NET的NCurses应用在Docker中无法运行

问题:dotnet-curses应用在Docker容器中无反应直接退出

背景

为学习目的,我使用dotnet-curses库开发了一个简单的C#应用,用于捕获键盘输入并在终端屏幕打印。该应用在Windows 10主机的Visual Studio中测试运行正常,代码如下:

using System;
using Mindmagma.Curses;

namespace example
{
    class Program
    {
        private static IntPtr Screen;

        private static readonly Random rng = new Random();

        static void Main(string[] args)
        {
            Screen = NCurses.InitScreen();
            try
            {
                Echoer();
            }
            finally
            {
                NCurses.EndWin();
            }
        }

        static void Echoer()
        {
            NCurses.NoDelay(Screen, true); // 获取字符无需等待回车键
            NCurses.NoEcho(); // 禁止字符回显到终端

            NCurses.Keypad(Screen, true);

            bool exit = false;
            while (!exit)
            {
                int input_char = NCurses.GetChar();
                switch (input_char)  // GetChar是阻塞语句,会等待用户按键
                {
                    case CursesKey.ESC:  // 检查是否按下ESC键
                        NCurses.MoveAddString(2, 0, "ESCAPE pressed, closing");
                        exit = true;
                        NCurses.Refresh(); // 刷新终端
                        break;

                    case -1: 
                        break;
                    
                    default: // 按下其他键时打印到屏幕
                        NCurses.MoveAddString(0, 0, $"Pressed key was: {Convert.ToChar(input_char)}");
                        NCurses.Refresh(); // 刷新终端
                        break;
                }
            }

        }
    }
}

然而,当我尝试在Docker容器中执行该应用时,它没有任何反应,既不报错,容器仅启动后就直接退出。Docker镜像通过以下Dockerfile创建:

# syntax=docker/dockerfile:1
# base image
FROM python:3.10-slim-buster
COPY ConsoleClient.exe /bin/
# dependencies
RUN apt update
RUN apt -y install libncurses5-dev libncursesw5-dev
RUN apt -y install wget
RUN wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb 
RUN dpkg -i packages-microsoft-prod.deb
RUN apt update 
RUN apt -y install apt-transport-https
RUN apt -y install dotnet-runtime-3.1 
EXPOSE 5000
CMD [ "/bin/ConsoleClient.exe" ]

疑问

据我了解,dotnet-curses库是跨平台的,应该能在Windows和Linux上运行。我是否可能缺少某些.dll文件?是否需要在Linux机器上安装dotnet-curses库(我的理解是不需要,因为开发时才需要,可执行文件应包含所有必要代码)?
dotnet-curses库底层依赖ncurses,因此我已在Dockerfile中通过apt安装了该依赖。

编辑:我知道所选基础镜像可能并非最佳,且Dockerfile中存在一些非必需配置(如EXPOSE端口),这些都是为后续用途准备的,我当前首要目标是让应用正常运行。


内容的提问来源于stack exchange,提问作者rongard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:50:31