基于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
相关产品推荐
相关产品推荐

