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

Docker Compose部署MySQL容器报错:无法启动服务器(退出码0)

MySQL容器在Ubuntu Server 22.04启动失败的原因与解决方法

问题原因

从日志中/usr/local/bin/docker-entrypoint.sh: line 122: 116 Killed这一行可以判断,**系统内存不足(OOM,Out Of Memory)**是核心原因。MySQL 8.x版本在初始化临时服务器阶段需要一定内存资源,Ubuntu桌面版通常配置了更多内存,而服务器版如果内存配额较低(比如1GB及以下),且未启用Swap分区时,系统的OOM Killer会强制终止占用内存较高的MySQL进程,导致启动失败。

解决步骤

1. 检查服务器内存状态

先确认当前内存和Swap的使用情况:

free -h

如果输出中Mem的total小于2GB,且Swap的total为0,基本可以确认是内存不足导致的问题。

2. 启用Swap分区(临时/永久)

如果没有Swap分区,先创建并启用:

# 创建1GB大小的Swap文件(可根据需求调整大小,比如2G)
sudo fallocate -l 1G /swapfile
# 设置文件权限,确保只有root能访问
sudo chmod 600 /swapfile
# 格式化为Swap分区
sudo mkswap /swapfile
# 启用Swap分区
sudo swapon /swapfile
# 设置开机自动挂载Swap(永久生效)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

3. 降低MySQL内存占用(自定义配置)

创建一个my.cnf配置文件在当前docker-compose.yml所在目录,调整MySQL的内存参数以适配低内存环境:

[mysqld]
# 降低InnoDB缓冲池大小,默认值较大
innodb_buffer_pool_size=64M
# 降低键缓冲区大小
key_buffer_size=8M
# 限制最大连接数
max_connections=20
# 关闭查询缓存(MySQL 8.x已废弃,默认关闭,这里显式声明)
query_cache_size=0

然后修改docker-compose.yml,添加该配置文件的挂载:

services:
  mydb:
    # 其他配置保持不变
    volumes:
      - ./data:/var/lib/mysql
      - ./my.cnf:/etc/mysql/conf.d/my.cnf  # 新增这一行

4. 清理损坏的初始化数据

之前启动失败可能在./data目录留下损坏的数据库文件,需要清理后重新初始化:

# 注意:如果该目录已有重要数据,请先备份
rm -rf ./data/*
# 重新启动容器
docker compose up -d

5. 验证容器状态

启动后查看日志确认是否成功:

docker logs mydb

或者直接登录MySQL验证:

docker exec -it mydb mysql -uroot -p

内容的提问来源于stack exchange,提问作者amiry jd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 12:22:43