Docker MySQL启动问题及解决过程

 更新时间:2025年09月27日 16:03:36   作者:惊鸿Randy  
Docker MySQL启动失败多因权限限制导致无法写入/tmp和/var/run/mysqld目录,推荐使用tmpfs挂载卷解决,同时需检查SELinux和数据目录权限,避免使用特权模式

问题概述

Docker 环境中的 MySQL 容器启动失败,主要表现为两个核心错误:

  • 临时文件权限问题
Can't create/write to file '/tmp/ibNysJx9' (Errcode: 13 - Permission denied)
  • UNIX Socket 锁文件问题
Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock
Unable to setup unix socket lock file

根本原因

这些问题的根本原因是 Docker 容器内的权限限制。

容器中的 MySQL 进程无法写入特定目录(/tmp 和 /var/run/mysqld),导致启动失败。

解决方案

方案一:使用 tmpfs 和挂载卷(推荐)

# 创建必要的目录
mkdir -p /path/to/mysql/data
mkdir -p /path/to/mysql/run/mysqld

# 设置正确的权限
chmod -R 777 /path/to/mysql/data
chmod 777 /path/to/mysql/run/mysqld
chown -R 999:999 /path/to/mysql/data  # MySQL 在容器中通常使用 UID 999

# 启动容器
docker run --name mysql-5.7.30 \
  --dns 8.8.8.8 \
  --dns 114.114.114.114 \
  --add-host=目标服务器的IP:127.0.0.1 \
  --tmpfs /tmp:rw,exec,mode=1777 \
  -v /path/to/mysql/data:/var/lib/mysql \
  -v /path/to/mysql/run/mysqld:/var/run/mysqld \
  -e MYSQL_ROOT_PASSWORD=your_password \
  -p 3306:3306 \
  -d mysql:5.7.30

方案二:使用自定义配置文件

# 创建配置目录
mkdir -p /path/to/mysql/conf

# 创建自定义配置文件
cat > /path/to/mysql/conf/my.cnf << EOF
[mysqld]
pid-file=/var/lib/mysql/mysqld.pid
socket=/var/lib/mysql/mysqld.sock
datadir=/var/lib/mysql
skip-host-cache
skip-name-resolve
EOF

# 启动容器
docker run --name gwms-mysql \
  --dns 8.8.8.8 \
  --dns 114.114.114.114 \
  --add-host=目标服务器的IP:127.0.0.1 \
  --tmpfs /tmp:rw,exec,mode=1777 \
  -v /path/to/mysql/data:/var/lib/mysql \
  -v /path/to/mysql/conf/my.cnf:/etc/mysql/my.cnf \
  -e MYSQL_ROOT_PASSWORD=your_password \
  -p 3306:3306 \
  -d mysql:5.7.30

方案三:使用特权模式(不推荐用于生产环境)

docker run --name gwms-mysql \
  --privileged \
  --dns 8.8.8.8 \
  --dns 114.114.114.114 \
  --add-host=目标服务器的IP:127.0.0.1 \
  -v /path/to/mysql/data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=your_password \
  -p 3306:3306 \
  -d mysql:5.7.30

其他可能需要考虑的因素

  • SELinux:如果系统启用了 SELinux,可能需要临时禁用或设置适当的上下文
setenforce 0  # 临时禁用
# 或者
chcon -Rt svirt_sandbox_file_t /path/to/mysql/data
  • 数据目录权限:确保数据目录具有正确的所有权
chown -R 999:999 /path/to/mysql/data
  • Docker 网络问题:解决 DNS 解析问题
# 添加到 /etc/hosts
echo "目标服务器的IP mysql-host" >> /etc/hosts

选择适合您环境的方案,建议从方案一开始尝试,它既解决了权限问题,又不会引入过多的安全风险。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 详解MySQL性能优化(一)

    详解MySQL性能优化(一)

    本文对MySQL性能优化进行了详细的总结与介绍,需要的朋友可以参考下
    2015-08-08
  • MySQL事务管理的作用详解

    MySQL事务管理的作用详解

    事务就是一组DML语句组成,这些语句在逻辑上存在相关性,这一组DML语句要么全部成功,要么全部失败,是一个整体。MySQL提供一种机制,保证我们达到这样的效果。事务还规定不同的客户端看到的数据是不相同的
    2022-08-08
  • MySQL学习之数据库备份详解

    MySQL学习之数据库备份详解

    本篇文章主要介绍了MySQL中的 数据库备份详解,有需要的朋友可以借鉴参考下,希望可以有所帮助,祝大家多多进步,早日升职加薪
    2021-09-09
  • mysql decimal数据类型转换的实现

    mysql decimal数据类型转换的实现

    这篇文章主要介绍了mysql decimal数据类型转换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • mysql外连接与内连接查询的不同之处

    mysql外连接与内连接查询的不同之处

    在关系型数据库中,我们经常是把数据存储到多个相互关联的表中,这些相互关联的表通过指定的列发生联系,下面这篇文章主要给大家介绍了关于mysql外连接与内连接查询的不同之处,需要的朋友可以参考下
    2021-06-06
  • SQL Server 完整备份遇到的一个不常见的错误及解决方法

    SQL Server 完整备份遇到的一个不常见的错误及解决方法

    这篇文章给大家介绍了SQL Server 完整备份遇到的一个不常见的错误及解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2019-05-05
  • MySQL表的操作之创建查看删除和修改

    MySQL表的操作之创建查看删除和修改

    这篇文章主要给大家介绍了关于MySQL表的操作之创建查看删除和修改的相关资料,MySQL是最常用的数据库,在数据库操作中基本都是增删改查操作,简称CRUD,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • windows 安装解压版 mysql5.7.28 winx64的详细教程

    windows 安装解压版 mysql5.7.28 winx64的详细教程

    这篇文章主要介绍了windows 安装解压版 mysql5.7.28 winx64的详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • sql ROW_NUMBER()与OVER()方法案例详解

    sql ROW_NUMBER()与OVER()方法案例详解

    这篇文章主要介绍了sql ROW_NUMBER()与OVER()方法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 深入MySQL存储引擎比较的详解

    深入MySQL存储引擎比较的详解

    本篇文章是对MySQL存储引擎的比较进行了详细的分析介绍,需要的朋友参考下
    2013-06-06

最新评论