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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:27:34