使用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
Uh oh!
There was an error while loading. Please reload this page.
-
为什么要使用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