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
相关产品推荐
相关产品推荐

