Docker Compose配置:SQL Server容器访问Windows挂载卷权限问题
解决WSL2 Docker挂载Windows目录给SQL Server 2025容器的权限问题
问题根源
Windows目录通过WSL2挂载到Linux环境时,权限模型与原生Linux目录不兼容。SQL Server容器以mssql用户(默认UID/GID为10001/10001)运行,该用户无法在Windows挂载目录上获得足够权限扩展数据库文件,从而触发操作系统错误31。
解决步骤
1. 调整WSL2中Windows磁盘的挂载参数
编辑WSL2的/etc/fstab文件,将D盘的UID/GID强制映射为容器内mssql用户的ID:
sudo nano /etc/fstab
添加或修改以下挂载规则:
/mnt/d /mnt/d drvfs defaults,uid=10001,gid=10001,umask=0000 0 0
保存后重新挂载D盘:
sudo mount -o remount /mnt/d
若不确定
mssql用户的UID/GID,可启动临时容器查看:docker run --rm mcr.microsoft.com/mssql/server:2025-latest id mssql
2. 正确配置Docker Compose文件
使用以下Compose配置,确保挂载目录和环境变量设置正确:
version: '3.8' services: sqlserver: image: mcr.microsoft.com/mssql/server:2025-latest environment: - ACCEPT_EULA=Y - SA_PASSWORD=YourStrongPassword123! - MSSQL_DATA_DIR=/app/data volumes: - type: bind source: /mnt/d/bob target: /app/data ports: - "1433:1433" restart: unless-stopped
3. 验证权限(可选)
启动容器后,进入容器检查目录权限:
docker exec -it <你的容器名称或ID> bash
执行命令查看/app/data的所有者:
ls -ld /app/data
输出应显示所有者为mssql(10001),此时即可正常创建数据库。
若仍存在权限问题,可在
services.sqlserver节点下添加以下配置关闭SELinux标签限制:security_opt: - label:disable
内容的提问来源于stack exchange,提问作者AndyW
相关产品推荐
相关产品推荐

