当前位置: 首页 > news >正文

Docker容器服务端口探测 - Leonardo

1.业务场景

业务需要,所有服务使用docker部署,在服务器重启后,systemctl管理的docker启动容器是并发的,业务服务启动有时候比中间件启动快,由于业务服务第一次启动时只连接中间一次,如果连接失败,就不会再重试了

2.修复方案

(1)业务服务增加重试连接次数(研发修改java代码)

(2)业务容器启动脚本增加对中间件服务的探测,探测后再启动,给中间件启动时间

  • 下载wait-for-it.sh脚本
https://github.com/vishnubob/wait-for-it/archive/refs/heads/master.zip
unzip wait-for-it-master.zip
chmod +x wait-for-it.sh
  • dockerfile文件
FROM jre-centos7:8u251
MAINTAINER xuxiaoming@zhengjue-ai.comCOPY entrypoint.sh *.jar /device-message/
WORKDIR /device-message/
HEALTHCHECK --interval=10s --timeout=30s --retries=3 CMD \curl --fail -sL -w "http_code:%{http_code} \n" \-o /dev/null http://localhost:8070/info || exit 1
RUN chmod +x /device-message/entrypoint.sh
ENTRYPOINT ["sh","/device-message/entrypoint.sh"]
  •  entrypoint.sh脚本
#!/bin/bashWAIT_FOR_IT="/device-message/wait-for-it.sh"
TIMEOUT=120SERVICES=("127.0.0.1:3306""127.0.0.1:6379""127.0.0.1:8848""127.0.0.1:9001""127.0.0.1:9200"
)log_with_timestamp() {echo "$(date +'%Y-%m-%d %H:%M:%S,%3N') $1"
}if [ -x "$WAIT_FOR_IT" ]; thenlog_with_timestamp "Starting dependency checks"for target in "${SERVICES[@]}"; do"$WAIT_FOR_IT" "$target" -t $TIMEOUTif [ $? -ne 0 ]; thenlog_with_timestamp "ERROR: Service $target not available within $TIMEOUT seconds" >&2exit 1fidonelog_with_timestamp "All dependencies are ready - starting application"
filog_with_timestamp "Launching Java application"exec java -Xmx2048m -Xms2048m -jar -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:/device-message/logs/gc-%t.log -Dfile.encoding=utf-8 -Duser.timezone=GMT+8 ./device-message-*.jar --spring.config.location=/device-message/config/
  •  业务服务在启动时,会探测中间件服务的端口,超时为120s,可自定义
  • docker logs -f device-message --tail 200
2025-07-28 12:28:23,052 Starting dependency checks
wait-for-it.sh: waiting 120 seconds for 127.0.0.1:23306
wait-for-it.sh: 127.0.0.1:23306 is available after 0 seconds
wait-for-it.sh: waiting 120 seconds for 127.0.0.1:26379
wait-for-it.sh: 127.0.0.1:26379 is available after 0 seconds
wait-for-it.sh: waiting 120 seconds for 127.0.0.1:28848
wait-for-it.sh: 127.0.0.1:28848 is available after 69 seconds
wait-for-it.sh: waiting 120 seconds for 127.0.0.1:29001
wait-for-it.sh: 127.0.0.1:29001 is available after 0 seconds
wait-for-it.sh: waiting 120 seconds for 127.0.0.1:29200
wait-for-it.sh: 127.0.0.1:29200 is available after 0 seconds
2025-07-28 12:29:32,354 All dependencies are ready - starting application
2025-07-28 12:29:32,356 Launching Java application

 

http://www.vanclimg.com/news/113.html

相关文章:

  • Docker搭建Hadoop集群
  • 总结与计划 7.28
  • Inventory System Plugin
  • 联邦学习中的持续学习技术
  • CHO细胞抗体表达|重组抗体纯化|高效抗体生产
  • new
  • (阶段二:落地) CMS 模板系统核心数据结构与流程梳理(SceneStack)
  • CAXA3D 实体设计2025最新版本下载安装图文教程,一键快速安装激活
  • 前端开发者的利器:6款最强类EXCEL表格插件对比,轻松实现Excel级交互
  • 软考系统分析师每日学习卡 | [日期:2025-07-28] | [今日主题:操作系统概述]
  • xshell的正则表达式
  • Linux查看PCIe版本及速率
  • 盈鹏飞嵌入式带你玩转T113系列tina5 SDK(7)-使用ADB来传输文件
  • CLion与Beta版:使用Unicode UTF-8提供全球语言支持
  • PowerShell脚本执行打包命令
  • 盈鹏飞嵌入式带你玩转T113系列tina5 SDK(6)-添加心跳灯
  • “轻”是态度,“强”是底气:折叠屏的“成人礼”
  • zip伪加密writeup
  • 25_1 C++函数参数传递方式
  • annocanda配置一个python环境的案例
  • wsl2 非系统盘下安装ubuntu22.04的极简方法
  • 盈鹏飞嵌入式带你玩转T113系列tina5 SDK(4)-如何适配自己的开发板
  • 盈鹏飞嵌入式带你玩转T113系列tina5 SDK(5)-Uboot单独编译
  • 使用Python和Gradio构建基于OpenAI GPT-4的AI聊天机器人
  • 19C++循环结构-多重循环(2)
  • 数据库计算机三级等级考试–网络技术
  • 树03
  • 如何快速做一个矢量格式的Logo?我盘点了6个最火的AI Logo设计工具,可快速生成品牌设计!
  • 【2025-07-25】暑假安排
  • B2013 温度表达转化