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

