当前位置: 首页 > 知识库问答 >
问题:

跑步Linux应用程序服务上docker容器中的Net Core控制台应用程序

穆展鹏
2023-03-14

背景资料

我有一个。NET Core 3.1控制台应用程序,这是一个长时间运行的进程。基本上,一些逻辑运行在一个无限循环中,每个循环都有一个延迟。

我目前正在使用Visual Studio将此应用程序打包到docker容器中,然后部署到Azure中的Linux应用程序服务。这一切都有效。我能够将docker容器发布到Azure容器注册表,然后将我的Linux应用程序服务指向该容器。容器成功启动,我可以在Azure中显示的日志中看到我的应用程序的一些控制台输出。那么,一切都好吗?不完全是!

(我知道这通常可以使用WebJob(SAN容器),但Linux应用程序服务还不支持WebJob。)

问题

Azure应用服务似乎默认会在端口80上对容器进行ping,以检查应用是否已成功启动。但是,它是一个控制台应用程序,而不是web/asp应用程序。因此,可以理解的是,Azure给了我以下错误:

2021-01-22T02:12:24.506Z ERROR - Container for site <sitename> did not start within expected time limit. Elapsed time = 230.4560202 sec
2021-01-22T02:12:24.508Z ERROR - Container didnt respond to HTTP pings on port: 80, failing site start. See container logs for debugging.
2021-01-22T02:12:24.553Z INFO  - Stopping site because it failed during startup.

有什么办法可以解决这个问题吗?不,它目前不能是带有WebWork的Windows应用服务。

共有2个答案

訾雅畅
2023-03-14

只是添加到工作区共享。您可以尝试配置平台在重新启动容器之前等待的时间。

为此,请将WEBSITES_CONTAINER_START_TIME_LIMIT应用设置设置为所需的值。

默认值为230秒,最大值为1800秒。

要执行此操作,请从Azure门户

此外,还有以下几点:

我需要在内置容器的代码中使用PORT变量吗?否,由于自动端口检测,PORT变量不是必需的。如果没有检测到端口,则默认值为80。

要手动配置自定义端口,请使用Dockerfile中的EXPOSE指令和应用程序设置WEBSITES\u port,并在容器上绑定端口值。

我是否需要为定制集装箱使用网站\u PORT?是的,这是定制容器所必需的。要手动配置自定义端口,请使用Dockerfile中的EXPOSE指令和应用程序设置WEBSITES\u port,并在容器上绑定端口值。

我可以在Docker映像中使用ASPNETCORE_URLS吗?是的,覆盖之前的环境变量。NET核心应用程序启动。例如,在init.sh脚本中:导出ASPNETCORE_URLS={你的值}

柯宜年
2023-03-14

作为一种解决方案,您可以使用没有终结点的asp.net核心应用,并在后台服务中运行逻辑。

见:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-5.0

 类似资料:
  • 我有一个简单的应用程序构建为docker图像(ubuntu),并把它放入docker容器。它有几个卷附加到它。我想将此容器推送到Azure AppServiceLinux。我尝试了几个选择,但没有成功。 > Azure CLI创建web应用程序并将容器推送到Azure容器注册表,然后将其部署到web应用程序。 给出错误。 将容器上传到,并更新Web应用容器设置以将此容器加载到Web应用中。 给出或

  • 问题内容: 对于急躁的人: 如何改变的价值在Linux中单个连接,使用,或者这样,或者是这可能吗? 较长的脱毛: 我正在开发一个使用长时间轮询HTTP请求的应用程序。在服务器端,需要知道客户端何时关闭连接。精度并不严格,但肯定不能为15分钟。接近一分钟就可以了。 对于不熟悉此概念的用户,长轮询HTTP请求的工作方式如下: 客户端发送请求 服务器使用HTTP标头进行响应,但响应保持打开状态。使用分块

  • 要在控制台应用程序中开始使用Hangfire,您需要首先将Hangfire包安装到控制台应用程序。因此,使用您的软件包管理器控制台窗口进行安装: PM> Install-Package Hangfire.Core 然后添加任务存储安装所需的软件包。例如,使用SQL Server: PM> Install-Package Hangfire.SqlServer 仅需 Hangfire.Core 软件包

  • 我在azure中有一个运行docker容器的应用程序服务。 日志显示它正在使用下面的docker run命令运行。我隐藏了一些私人公司的价值观。 docker run-d-p 4040:443--name hidden-e WEBSITE\u SITE\u name=hidden-e WEBSITE\u AUTH\u ENABLED=False-e PORT=443-e WEBSITE\u ROL

  • 在独立AEM安装中,felix OSGi容器是否存在于jetty servlet容器中?或者Jetty服务器是作为捆绑包安装在Felix OSGi容器中的? AEM启动时,哪一个将首先启动? 对于基于战争的安装,这将如何改变? 根据这个答案,两者都是可能的。但我想知道AEM采用哪种方法。

  • 我正在使用angular框架构建前端应用程序。有没有办法,我如何将应用程序部署到Azure Linux应用程序服务? 我已经用NodeJS堆栈创建了Web应用程序,并将其分配给Linux应用程序服务。我用命令构建了我的angular应用程序,并将其部署到这个web应用程序中。当我使用url: