保持自托管服务堆栈服务作为 docker swarm 服务打开,而不使用控制台 readline 或 readkey

2024-04-04

我有一个使用 servicestack 用 C# 编写的控制台应用程序,其形式如下:

static void Main(string[] args)
        {
            //Some service setup code here

            Console.ReadKey();
        }

这段代码在 Windows 上作为控制台运行时工作正常。实现几乎完全一样https://github.com/ServiceStack/ServiceStack/wiki/Self-hosting https://github.com/ServiceStack/ServiceStack/wiki/Self-hosting因为这是一个测试项目

然后我在 Linux 上使用 mono 编译这个项目并构建成 docker 文件。

如果它是交互式的,我运行基于此图像的容器没有问题

docker run -it --name bob -p 1337:1337 <myservice>

容器在前台运行

但是,如果我省略 -it 开关,容器会立即退出 - 我认为因为没有 STDIN 流,所以 Console.ReadKey() 不起作用。

我正在尝试将服务托管在群中,因此不存在分离的概念。我可以在我的主要方法中启动一个循环来保持控制台服务处于活动状态,但这对我来说似乎很棘手......

在我想要分离运行容器的情况下,有没有一种好方法可以让我的服务保持活动状态(docker run -d ...)


偷窃自这个答案让 .NET 应用程序保持活力 https://stackoverflow.com/a/34099238/1318694,您可以等待而不使用Console这意味着您不需要在 Docker 中保持标准输入打开(docke run -i) :

private ManualResetEvent Wait = new ManualResetEvent(false);
Wait.WaitOne();

Docker 将发送一个 SIGTERMdocker stop并且 ctrl-c 将发送SIGINT so 这些信号应该被捕获 https://stackoverflow.com/questions/6546509/detect-when-console-application-is-closing-killed然后你让程序结束

Wait.Set();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保持自托管服务堆栈服务作为 docker swarm 服务打开,而不使用控制台 readline 或 readkey 的相关文章

随机推荐

  • 在字符串中添加新行以进行翻译

    我正在使用 ngx 翻译 如何在要翻译的字符串中添加换行符 在我的模板中 我有 STRING TO TRANSLATE translate 在我的 en json 中 STRING TO TRANSLATE text on first li
  • 如何将纪元转换为日期时间红移?

    我在 dbeaver 工作 我有一个表x 表 x 有一个 时间戳 列 1464800406459 1464800400452 1464800414056 1464800422854 1464800411797 我想要的结果 Wed 01 J
  • ggplot根据数据框中的值重新排序堆积条形图

    我正在 R 中使用 ggplot2 制作堆积条形图 并在 y 轴上具有特定的条形排序 create reproducible data library ggplot2 d lt read csv text Day Location Leng
  • BASH if 语句中的函数返回值

    我已经研究了这里处理 BASH if then 语句中的函数返回值的各种方法 但似乎都不起作用 这是我所拥有的 function is cloned if d DIR NAME then return SUCCESS fi return F
  • 在后台加载新场景

    我正在创建一个针对 Samsung Gear VR 的 Unity 应用程序 我目前有两个场景 最初的场景 第二个场景 数据量大 加载场景需要太多时间 从第一个场景开始 我想在后台加载第二个场景 并在加载后切换到它 当新场景在后台加载时 用
  • IE11未发起CORS请求

    通过摆弄 如果是跨源的 IE11 似乎不会发出 ajax 请求 如果资源 API 未发送必要的标头 FF 和 Chrome 至少会发出请求并抛出错误 在我的例子中 资源 API Web API 2 0 是添加所需的标头 http www a
  • 动态 Jquery 拆分器插件

    我正在尝试使用 Jquery Splitterhttp www methvin com jquery splitter http www methvin com jquery splitter 如果分隔窗格是静态的 它工作得很好 但我需要在
  • 两个视图 - 一个 ViewModel

    我一定是误解了这个概念ViewModels和意见 但目前我无法从地面重建应用程序 这次做得更好 我的情况是 我有一个视图 用户可以在其中加载文件并读取它们 绘图仪显示图形并实现一些操作 我希望能够生成数据报告 如摘要 但我希望它在其他视图中
  • 如何仅使用 HTML 和 CSS(或者我猜是 java)创建滚动文本的动画,就像苹果过去在其实时页面上使用的那样?

    我的网站顶部有一个蓝色横幅 左侧有浅色径向渐变 我想要在横幅右侧向上滚动的白色文本动画 我希望它在出现时淡入 然后淡出 我希望不使用 Flash 并尽可能少地使用 Java 来完成此操作 我可以通过 CSS 进行工作并设置布局 但我不知道如
  • C# 中的实时麦克风幅度测量

    我正在寻找简单的解决方案 它将返回 C 中麦克风输入的整数值 我已经在网上检查了可用的示例 但它们都不能在 x64 环境中工作 VS2008 W7 x64 是否有任何简单的解决方案可以返回 C 中麦克风输入的幅度 或频率 值 我尝试了 NA
  • Julia ccall 接口和符号的问题

    我正在尝试使用朱莉娅的ccall与 C 库接口的函数 所有类型和指针都是正确的 并且下面的函数调用成功返回正确的答案 为简洁起见 此处未显示变量定义和设置 ccall vDSP convD libacc Void Ptr T Int64 P
  • jquery("foo bar") 与 jquery("foo").find("bar")

    我正在尝试遍历 xml 文档 这不起作用 零结果 jquery foo bar 这确实有效 jquery foo find bar 知道为什么吗 jquery foo bar 第一个查找 bar 元素是 foo 元素的后代 所以在这个例子中
  • 套接字编程最佳实践?

    我正在设计一个文件同步应用程序 如 DropBox 客户端在端口 443 上与服务器保持持久的安全 SSL TCP 套接字 每当在客户端上创建 更改 删除文件时 包含相关数据的数据包就会通过套接字发送到服务器 服务器对其进行处理更新服务器上
  • #include<> 和 #define"" 之间有什么区别[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 有人能告诉我 include 和 define 之间的区别吗 我知道 include 用于包含头文件 define 用于定义宏或常量 是不是
  • 在 Spring Security 中以编程方式自定义 WebAuthenticationDetails

    我目前正在从基于 xml 的 spring security 配置转向基于 java 的配置 我需要通过 Java 设置自定义 WebAuthenticationDetails 有没有办法做到这一点 在 XML 中 我只需设置 Userna
  • Qt 5.7 将 -std=gnu++11 添加到我的编译器标志中,破坏 -std=c++14

    我在我的中设置以下标志CMakeLists txt set CMAKE CXX FLAGS std c 14 g O0 然后我正在使用find package定位Qt5Test find package Qt5Test REQUIRED 然
  • tf.image.resize_bilinear 与 cv2.resize

    结果来自tf image resize bilinear与cv2 resize 我觉得这有点麻烦 放align corners True并不总是合理的 因为四个角并不总是应该固定在角上 那么有没有办法让它变得更加 对称 呢 重现代码 imp
  • jQuery Mobile -> 覆盖 jQuery UI Datepicker -> 布局损坏

    我在我的 Web 应用程序中使用 jQuery Mobile 有一个日期选择器会覆盖默认的 jQuery UI 日期选择器 这是来源 https github com jquery jquery mobile tree master exp
  • Android 应用程序更新的 Delta 更新

    我正在尝试设置自己的服务器来托管 apk 文件 这些文件可用于客户端应用程序中的安装和更新 当apk有新版本更新时 客户端只需要下载更新的部分 我可以在服务器端使用 bsdiff 生成补丁文件 但是在客户端 我应该如何将补丁文件与原始apk
  • 保持自托管服务堆栈服务作为 docker swarm 服务打开,而不使用控制台 readline 或 readkey

    我有一个使用 servicestack 用 C 编写的控制台应用程序 其形式如下 static void Main string args Some service setup code here Console ReadKey 这段代码在