You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose升级MySQL到8.0.2后CircleCI出现Exit Code 137怎么解决

问题根因分析

你配置的resource_class: large是给CircleCI运行job的执行器用的,而你用了setup_remote_docker来运行Docker Compose服务,Remote Docker环境的资源是独立分配的,默认仅配备2G内存,完全无法满足MySQL 8.x的默认运行内存要求,所以即使你提升了job本身的内存,Docker运行的容器依然会触发OOM杀掉进程,返回Exit Code 137。本地环境内存充足所以不会触发该问题。

排查&解决方案

  • 第一步:显式配置Remote Docker的资源规格
    在setup_remote_docker配置块下增加资源声明,示例如下:
    - setup_remote_docker:
        docker_layer_caching: true
        resource_class: large # 给Remote Docker分配8G内存
    
  • 第二步:优化MySQL 8的运行参数降低内存占用
    在docker-compose.test.yml的mysql服务下添加启动命令,关闭非必要的高内存消耗功能,同时修正你当前配置中volume命名不匹配的问题(你当前声明的volume是proj-mysql-8.0.2,引用却写的proj-mysql,会导致匿名卷生成,拖慢初始化速度):
    mysql:
      image: "mysql:8.0.2"
      restart: always
      # 新增以下配置
      command: >
        --default-authentication-plugin=mysql_native_password
        --performance-schema=OFF
        --innodb-buffer-pool-size=256M
        --innodb-flush-log-at-trx-commit=0
      volumes:
        - proj-mysql-8.0.2:/var/lib/mysql
      expose:
        - "3306"
    
  • 第三步:增加服务健康检查避免初始化未就绪问题
    MySQL 8的初始化时间比5.7长很多,depends_on仅保证容器启动不保证服务可用,容易引发后续连接报错,可以补充健康检查配置:
    mysql:
      # 原有配置不变
      healthcheck:
        test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot"]
        interval: 5s
        timeout: 10s
        retries: 20
    
    app:
      depends_on:
        mysql:
          condition: service_healthy
    
  • 第四步:手动验证OOM状态
    可以在测试运行步骤前后添加调试命令,确认具体被杀掉的容器:
    # 查看所有容器运行状态
    docker ps -a
    # 查看容器是否被OOM杀掉,替换<容器ID>为mysql容器的ID
    docker inspect <容器ID> | grep OOMKilled
    # 查看所有容器的资源占用情况
    docker stats --no-stream
    

内容的提问来源于stack exchange,提问作者MIGUEL ALFONSO FIGUEROA ANGULO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 11:15:05