关于Docker Compose的启动顺序的讨论 - springboot实战电商项目mall4j

本文探讨了在Docker Compose中如何正确处理服务启动顺序,特别是在涉及依赖如MySQL的应用场景下。依赖于`depends_on`可能导致应用程序在数据库未完全启动时尝试连接,官方建议使用`wait-for-it`工具或`healthcheck`进行更可靠的启动检查。此外,文中还指出,即使MySQL端口可用,初始化脚本可能仍在运行,因此需要更精确的健康检查,例如通过检查数据库状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

springboot实战电商项目mall4j (https://gitee.com/gz-yami/mall4j)

java商城系统源码

以下讨论基于Docker Compose的V2版本:

现在容器编排使用广泛,大家都在用docker-compose进行网站部署,在部署的过程中,会使用到Mysql,Redis,JAVA后端程序,PHP后端程序之类的,会涉及到一个程序的启动先后问题,一般的解决方案都是在Compose文件中,添加depends_on参数,例如:

version: "2.4"
services:
  xxl-job-mysql:
    container_name: xxl-job-mysql
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=123456
    image: mysql:5.7
    networks:
      xxl-job-network:
        ipv4_address: 192.168.189.2
    ports:
      - 3306:3306
    restart: always
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/initdb:/docker-entrypoint-initdb.d

  xxl-job-admin:
    container_name: xxl-job-admin
    environment:
      - PARAMS=--spring.datasource.url=jdbc:mysql://xxl-job-mysql:3306/xxl_job?Unicode=true&characterEncoding=UTF-8 \
        --spring.datasource.username=root \
        --spring.datasource.password=123456 \
        --xxl.job.accessToken=
    image: xuxueli/xxl-job-admin:2.3.0
    networks:
      xxl-job-network:
        ipv4_address: 192.168.189.3
    ports:
      - 8080:8080
    restart: always
    # 依赖于数据库,先启动数据库再启动JAVA程序
    depends_on:
      - xxl-job-mysql

networks:
  xxl-job-network:
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.189.0/24
    name: xxl-job-network

以上编排文件好像看起来没什么问题,但实际执行的时候,在数据库启动后,因为depends_on参数,会在启动数据库后马上启动JAVA程序。不管Mysql是否已经启动完成。这时候就可能出现数据库还没启动好,JAVA程序就已经启动完成,并尝试去连接数据库,造成连接失败,JAVA程序报错。所以说,depends_on并没有真正的等待上一个程序启动完成。这个在docker官方文档也有说明:https://docs.docker.com/compose/startup-order/

里面有一句"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值