Docker Stack部署官方MySQL镜像服务启动后自动停止问题排查求助
故障根因分析
1. 内存资源配置不足
你在Stack部署中给MySQL服务设置的内存上限仅为90M,MySQL 8.0版本在数据库初始化阶段的内存占用会超过该阈值,触发Docker Swarm的OOM(内存溢出)kill机制,直接终止初始化进程,就是你日志中45 Killed记录的来源。
你使用docker-compose部署时没有设置如此严格的内存限制,所以可以正常运行。
2. 有状态服务副本配置错误
MySQL是典型的有状态数据库服务,你直接设置replicas: 3且所有副本挂载同一个共享存储卷alpine-db_backup,多个进程同时读写同一份MySQL数据文件,也会导致实例启动异常,严重时还会损坏数据。
修复方案
- 调高MySQL服务的内存资源限制,建议至少设置为
512M,生产环境建议预留1G以上内存:
resources: limits: cpus: '0.50' memory: 512M reservations: cpus: '0.25' memory: 256M
- 如果你需要部署多实例MySQL集群,不要直接使用普通的replicas配置,应当搭配
max_replicas_per_node: 1+独立存储卷绑定,或者采用Docker Swarm有状态部署方案,确保每个实例有独立的数据目录。 - 测试阶段如果不需要多副本,可以直接把
replicas改为1,先验证单实例可以正常启动。
内容的提问来源于stack exchange,提问作者user11766958
相关产品推荐
相关产品推荐

