zoukankan      html  css  js  c++  java
  • 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 命令问题没有出现,搞定!

  • 相关阅读:
    微信内置浏览器的JsAPI(WeixinJSBridge)
    跨域请求 jQuery的ajax jsonp的使用
    Window10设置技巧
    Oracle命令集
    通过sql server 连接mysql
    深入 AngularUI Router
    解决Web部署 svg/woff/woff2字体 404错误
    C#四舍五入、上取整、下取整
    SQL语句:两个时间区间段,只要有交集,就能筛选出来
    url传参中文乱码问题
  • 原文地址:https://www.cnblogs.com/dudu/p/7294879.html
Copyright © 2011-2022 走看看