使用healthcheck控制docker-compose各容器启动顺序实践 #53
Valdanitooooo
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
为什么要使用healthcheck控制容器启动顺序?
服务间的依赖关系, 我们一般通过
depends_on
去限制。depends_on
的作用就是, 如果B容器depends_on
A容器, 就是A容器是up
状态时, 开始启动B容器。但是容器的
up
状态并不代表容器中服务已经启动成功, 查看容器日志, 可能会看到服务正在启动, 并没有到可以访问的状态。所以当B容器启动时需要访问A容器的服务时, 光是检查A容器是否
up
是不够的, 要检查A容器是否可以访问。同时启动多个容器, 会瞬间占用服务器很多内存, 给服务器造成压力, 有些容器也因为内存不足无法启动, 需要让容器启动减小内存占用。
使用healthcheck
HEALTHCHECK 支持下列选项:
各种check方式
interval
、timeout
、retries
、start_period
等参数可以根据需要去调整, 下面主要介绍一下test
的各种场景:有
nc
命令的镜像, 如wso2 apim、kafka、consul, 使用nc -z [host] [port]
没有
nc
命令, 但有curl
命令的镜像, 如dgraph、beakerx、tileserver-gl, 使用curl -IL [url]
curl
命令也没有, 但有netstat
命令的镜像, 如node镜像alpine版本, 使用netstat -plnt | grep ':[port]'
没有以上这些命令, 并且连
ps
命令都没有, 如java镜像, 使用wait-for-it.sh一些特殊的镜像, postgresql、nginx, 使用专属命令
查看healthcheck debug日志
在大多数情况, 我们并不知道镜像中到底有没有
nc
、curl
等命令, 做健康检查不成功, 我们需要看一下日志是什么原因查看healthcheck日志命令:
Beta Was this translation helpful? Give feedback.
All reactions