docker swarm:执行 service update 过程中服务短暂不能访问的问题

这是我们使用自建 docker swarm 集群后在部署时遇到的一个问题,使用 docker service update 命令更新服务时,

docker service update -d=false --force service_name

在更新的过程中服务有短暂的时间不能访问。

该服务中运行的是 asp.net core web api ,所使用的 Dockerfile 如下:

FROM microsoft/aspnetcore:1.1.2
ARG PROJECT
WORKDIR /app
COPY ${PROJECT}/publish .
RUN echo "dotnet ${PROJECT}.dll --urls http://*:80" > run.sh

通过在服务更新期间在另外一个容器中运行下面的 curl 命令捕捉这个问题:

while true;do curl -sSf -w ‘%{http_code}‘ cloud_api/alive;sleep 2;done

service update 期间不能访问所更新的服务时,curl 会出现下面的输出:

curl: (7) Failed to connect to cloud_api port 80: Connection refused
000

怀疑是容器启动后,asp.net core web api 站点没有立即开始工作,dotnet 命令启动站点也需要一定的时间。

针对这个怀疑点,在 Dockcefile 中添加 HEALTHCHECK 指令,这样可以让 docker 在容器启动后对容器内应用进行健康检查,检查通过才将容器投入使用。

HEALTHCHECK --interval=5s --timeout=20s    CMD curl -fs localhost/alive || exit 1

注:localhost/alive 是容器内应用实现的一个健康检查 url 。

添加 HEALTHCHECK 后重新构建镜像并部署,执行 service update 命令问题没有出现,搞定!

时间: 2024-11-15 09:21:06

docker swarm:执行 service update 过程中服务短暂不能访问的问题的相关文章

只能在执行Render() 的过程中调用 RegisterForEventValidation;

October 17, 2008  3:28 PMMarch 29, 2013  8:28 PM Aillo 编程   0 Comments 在实现"将GridView中的数据导出到Excel中"的时候出现了如下错误: 用户代码未处理 InvalidOperationException 只能在执行 Render() 的过程中调用 RegisterForEventValidation: EnableEventValidation属性是 .NET Framework 2.0 中是新增的属性

只能在执行 Render() 的过程中调用 RegisterForEventValidation(RegisterForEventValidation can only be called during Render();

只能在执行 Render() 的过程中调用 RegisterForEventValidation(RegisterForEventValidation can only be called during Render(); 当用GridView导出Execl的时候,会发生只能在执行 Render() 的过程中调用 RegisterForEventValidation的错误提示.有两种方法可以解决以上问题:1.修改web.config(不推荐)<pages enableEventValidatio

Error 之 只能在执行Render() 的过程中调用 RegisterForEventValidation;

在实现"将GridView中的数据导出到Excel中"的时候出现了如下错误: 用户代码未处理 InvalidOperationException 只能在执行 Render() 的过程中调用 RegisterForEventValidation: EnableEventValidation属性是 .NET Framework 2.0 中是新增的属性,默认的情况下该属性的值为true:通过这个新增的功能ASP.NET会检查 POST方法中的所带的参数,如果认为不合法,就会抛出异常.这个设计

"只能在执行Render()的过程中调用RegisterForEventValidation" 解决方案

开发中遇到令人蛋疼的问题: 只能在执行Render()的过程中调用RegisterForEventValidation 当出现的异常的提示: 异常详细信息: System.InvalidOperationException:只能在执行Render()的过程中调用RegisterForEventValidation: 不要伤心,下面是解决办法: 出现这个异常,解决问题只需要在<%@ Page %> 指令中加上 EnableEventValidation="false" &qu

问题:只能在执行 Render() 的过程中调用 RegisterForEventValidation;结果:只能在执行 Render() 的过程中调用 RegisterForEventValidation

只能在执行 Render() 的过程中调用 RegisterForEventValidation 当在导出Execl或Word的时候,会发生只能在执行 Render() 的过程中调用 RegisterForEventValidation的错误提示.下面的2中方法是在网上找到的,没有应用:1.修改web.config(不推荐) <pages enableEventValidation ="false" ></pages> 2.直接在导出Execl的页面修改 <

关于Appium执行用例过程中问题处理办法

关于Appium执行用例过程中问题处理办法 1.     运行环境 1.1 windows10   64位系统 1.2 华为荣耀V10   Android 9 1.3 appium-desktop 1.15.1   2.     执行用例重复安装问题(io.appium.uiautomator.server 和 io.appium.uiautomator.server.test)解决方案 2.1   手机开发者模式中USB调试,关闭ADB安装 2.2修改文件1    路径:C:\Program

Docker swarm 获取service的container信息

我们可以通过docker service create创建服务,例如: docker service create --name mysql mysql:latest 服务创建好后,如何来获取该service包含的容器信息呢?比如获取刚才创建的mysql服务的容器.我们可以通过docker service ps命令来获取, 命令行方式 ~# docker service ps mysql ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR P

手工配置Service的过程中。

正在使用srvctl创建service时间,需要注意TAF政策选择必须是dbms_service套餐配置.下面的例子演示了如何创建一个服务felix_ora: 1.查看现有的创建之前系统service: SQL> show parameter service NAME                                 TYPE        VALUE ------------------------------------ ----------------------------

docker swarm英文文档学习-8-在集群中部署服务

Deploy services to a swarm在集群中部署服务 集群服务使用声明式模型,这意味着你需要定义服务的所需状态,并依赖Docker来维护该状态.该状态包括以下信息(但不限于): 应该运行服务容器的镜像名称和标记有多少容器参与服务是否有任何端口暴露给集群之外的客户端当Docker启动时,服务是否应该自动启动重启服务时发生的特定行为(例如是否使用滚动重启)服务可以运行的节点的特征(例如资源约束和位置首选项)有关群模式的概述,请参见 Swarm mode key concepts.有关