蓝易云

Docker-compose 容器健康检查的作用

707次阅读
没有评论

共计 1010 个字符,预计需要花费 3 分钟才能阅读完成。

docker-compose 中,往往会伴随着多个容器的一起的创建和销毁。例如,微服务需要等待 nacos 成功启动以后再进行启动,否则先启动则会启动失败,因为不能在 nocos 上注册自己。

以下是一个简单的案例:

version: '3.1'
services:
  nginx:
    image: nginx
    container_name: nginx
    restart: always
    ports:
      - 80:80
  mysql:
    image: mysql:8.0.26
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456

假设 nginx 为一个业务服务,并且需要的数据来自 mysql。此时直接使用 docker-compose up -d 启动,发现 nginx 马上可以访问,因为业务服务比 mysql 启动快,但是此时如果是真正的业务服务,还是不能正常提供服务的。并且,有可能等 mysql 启动完成后,还是连接数据库失败的状态,需要重启业务服务才可以提供服务。

为了避免这种问题的出现,需要让 nginx 在 mysql 成功启动以后才进行启动,可以添加 depends_on 选项,告诉 nginx 依赖 mysql 的启动,等它启动以后自己再启动。当然,加了这个还是不够的,只能保证 nginx 在 mysql 后面启动,但是 nginx 启动太快了,所以还是会先启动完成。所以需要添加启动的条件,即给 mysql 添加健康检查,nginx 等 mysql 启动,并健康检查通过以后再启动,文件如下:

version: '3.1'
services:
  nginx:
    image: nginx
    container_name: nginx
    restart: always
    ports:
      - 80:80
    depends_on:
      mysql:
        condition: service_healthy
  mysql:
    image: mysql:8.0.26
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    healthcheck:
      test: ["CMD", "mysql", "-u", "root", "-p123456", "-e", "select 1"]
      interval: 5s
      timeout: 3s
      retries: 10

此时运行启动命令,发现 nginx 需要等待一段时间才可以访问,说明达到了想要的效果。

提醒:本文发布于149天前,文中所关联的信息可能已发生改变,请知悉!

AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年
正文完
 0
阿蛮君
版权声明:本站原创文章,由 阿蛮君 于2024-07-14发表,共计1010字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
Copyright © 2022-2024 阿蛮君博客 湘ICP备2023001393号
本网站由 亿信互联 提供云计算服务 | 蓝易云CDN 提供安全防护和加速服务
Powered by Wordpress  Theme by Puock