执行git add -A遇权限拒绝:Docker挂载MySQL目录的Git提交问题
问题分析与解决方法
问题根源
当Docker挂载./db到MySQL容器的/var/lib/mysql后,容器内的MySQL进程会以**mysql用户(默认UID/GID为999)**创建数据文件。这些文件在WSL的Ubuntu文件系统中会继承容器内的权限,导致你的WSL普通用户没有读写权限,所以执行git add -A时会提示权限拒绝。这是Docker挂载宿主机目录的常见权限问题,不属于正常情况,需要调整权限配置。
解决方案
1. 调整挂载目录的权限(推荐)
在WSL的Ubuntu终端中,先停止Docker容器:
docker-compose down
然后修改./db目录的权限,让当前用户拥有所有权,同时给其他用户必要的读写权限(或者直接匹配MySQL容器的UID):
# 方法1:给当前用户赋予目录所有权 sudo chown -R $USER:$USER ./db # 方法2:匹配MySQL容器的UID(999),让容器和宿主机权限一致 sudo chown -R 999:999 ./db
之后重新启动容器:
docker-compose up -d
这样容器创建的文件会和宿主机权限兼容,git就能正常访问目录了。
2. 修改docker-compose.yml中的用户配置
在docker-compose.yml的MySQL服务中,指定使用宿主机当前用户的UID/GID运行容器,这样创建的文件权限会和你的WSL用户一致:
services: mysql: image: mysql:latest volumes: - ./db:/var/lib/mysql user: "${UID}:${GID}" # 动态获取当前用户的UID和GID # 其他配置...
修改后重启容器即可,这种方式不需要手动调整目录权限,更灵活。
3. 排除db目录在Git追踪外(可选)
如果db目录是MySQL的动态数据目录,不需要提交到Git仓库,可以在项目根目录的.gitignore文件中添加:
/db/
这样git会自动忽略该目录,避免权限问题的同时也符合Git的最佳实践(数据文件不应该纳入版本控制)。
内容的提问来源于stack exchange,提问作者Emmyapi
相关产品推荐
相关产品推荐

