如何不进入容器即可检查docker-compose中运行的内部服务状态
Docker Compose 容器内部服务状态检测方案
完全可以在不进入容器的前提下实现检测,使用 docker-compose exec 的非交互模式直接在目标容器内执行状态查询命令即可,适配脚本自动化场景。
基础使用方法
- 单服务查询命令格式:
docker-compose exec -T <docker-compose.yml中定义的服务名> <内部服务状态查询命令>
其中-T参数用于禁用伪终端分配,避免脚本执行时出现TTY相关报错,非常适合自动化检测场景。
- 示例:查询tass容器内部的tass服务运行状态:
docker-compose exec -T tass service tass status
命令返回结果和进入容器内部执行service tass status的输出完全一致。
批量检测脚本示例
如果需要同时检测多个自定义服务,可以直接写成shell脚本批量执行:
#!/bin/bash # 定义映射关系:key为compose中定义的服务名,value为容器内部的自定义服务名 declare -A SVC_MAP=( ["tass"]="tass" ["inception"]="inception" ) # 遍历检测 for compose_svc in "${!SVC_MAP[@]}"; do inner_svc=${SVC_MAP[$compose_svc]} echo ">>> 检测容器${compose_svc}内的${inner_svc}服务状态:" # 执行状态查询,过滤运行状态关键字 docker-compose exec -T ${compose_svc} service ${inner_svc} status | grep -q "active (running)" if [ $? -eq 0 ]; then echo "*${inner_svc} 运行正常*" else echo "*${inner_svc} 运行异常*" fi echo "----------------------------------------" done
注意事项
- 如果docker-compose.yml不在当前执行目录,需要在命令开头加
-f /path/to/你的/docker-compose.yml指定配置文件路径 - 执行命令的用户需要有docker操作权限,或者提前配置sudo免密后在命令前加sudo执行,避免脚本出现交互阻塞
内容的提问来源于stack exchange,提问作者Akshay khairnar
相关产品推荐
相关产品推荐

