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

如何阻止Docker中MySQL容器自动退出并保持持续运行?

解决Docker中MySQL容器自行退出(Exited 137)的问题

Exited (137) 状态码明确指向容器被系统的OOM(内存不足)杀手强制终止——当主机内存资源耗尽时,系统会优先杀掉占用内存较高的进程(比如MySQL)来释放资源。以下是具体的解决办法:

  • 给容器分配合理的内存资源
    启动容器时通过--memory(硬内存上限)和--memory-reservation(软内存限制)参数,确保MySQL有足够的运行内存,同时避免过度占用主机资源。示例命令:

    docker container run --name mysqldb --network app \
      -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=root \
      --memory=2g --memory-reservation=1g \
      -d mysql:8
    

    其中--memory=2g是容器能使用的最大内存,--memory-reservation=1g是内存软限制,系统内存紧张时会优先回收这部分资源,但不会直接杀死容器。

  • 挂载本地目录存储数据(推荐)
    将MySQL的数据目录挂载到主机本地,既避免容器重启时数据丢失,也能减少容器内部磁盘IO压力,间接降低内存占用:

    docker container run --name mysqldb --network app \
      -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=root \
      --memory=2g --memory-reservation=1g \
      -v /your/local/path/mysql-data:/var/lib/mysql \
      -d mysql:8
    

    替换/your/local/path/mysql-data为主机上实际的目录路径,确保该目录具备读写权限。

  • 调整MySQL配置降低内存消耗
    如果主机内存有限,可通过自定义配置减少MySQL的内存占用。创建my.cnf文件:

    [mysqld]
    performance_schema = OFF
    table_definition_cache = 400
    table_open_cache = 256
    

    启动容器时挂载这个配置文件:

    docker container run --name mysqldb --network app \
      -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=root \
      --memory=2g --memory-reservation=1g \
      -v /your/local/path/my.cnf:/etc/mysql/conf.d/my.cnf \
      -v /your/local/path/mysql-data:/var/lib/mysql \
      -d mysql:8
    

    上述配置会关闭性能监控schema,降低表缓存大小,有效减少MySQL的内存开销。

  • 排查主机内存占用情况
    定期检查主机内存状态,确认是否有其他进程占用过多资源:

    free -h
    top
    

    若主机长期内存不足,建议升级内存或关闭不必要的后台进程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 03:44:57