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

Docker-compose部署MySQL与Go服务时出现dump.sql权限拒绝问题咨询

MySQL容器初始化SQL权限拒绝问题解决方案

该报错本质是MySQL容器内默认运行的mysql用户(UID为999)没有读取宿主机挂载的./mysql/dump.sql文件的权限,此前可正常运行大概率是之前宿主机对应文件/目录权限配置更宽松,或是部署环境变更、文件权限被修改导致。

排查步骤

  • 执行命令查看宿主机上SQL文件和对应目录的权限配置:
    # 查看dump.sql文件权限
    ls -l ./mysql/dump.sql
    # 查看mysql目录权限
    ls -ld ./mysql
    
  • 核对文件的所有者、所属组和读权限是否对容器内用户开放,对比MySQL容器默认运行用户UID(999)的权限匹配情况。

解决方案

方案1:直接开放文件读权限(适合本地开发环境)

在宿主机执行命令给所有用户开放文件读权限、目录访问权限:

chmod a+r ./mysql/dump.sql
chmod a+rx ./mysql

该方案改动最小,可快速修复本地开发环境的权限问题。

方案2:修改文件所有者匹配容器运行用户(适合生产环境)

直接将挂载目录的所有者改为MySQL容器默认运行的UID 999,无需开放多余权限:

sudo chown -R 999:999 ./mysql

方案3:强制容器以root用户运行

不想修改宿主机文件权限的场景下,直接修改docker-compose.yml的db服务配置,新增user: root参数即可:

services:
  db:
    image: mysql 
    restart: always
    user: root # 新增该行配置
    # 其余原有配置保持不变
    expose:
      - 3306
    # ... 剩余配置省略

生效注意事项

修复配置后需要删除旧的数据库卷,避免残留的初始化状态导致配置不生效:

# 停止服务并删除关联卷
docker-compose down -v
# 重新启动服务
docker-compose up -d

如果是WSL2环境部署,还需注意不要把项目放在Windows NTFS挂载盘内,要放到WSL原生文件系统中,避免跨系统挂载的默认权限限制导致问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:45:06