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

基于WSL2的Docker挂载物理文件夹至SQL Server容器启动失败求助

解决WSL2 Docker Desktop中SQL Server容器启动后立即退出的权限问题

问题场景

在Windows Server 2022数据中心+WSL2版Docker Desktop环境下,创建SQL Server容器后立即退出(状态码1),日志显示权限拒绝相关错误。此前在Windows Server 2019+Hyper-V Docker环境中相同配置可正常运行,已为docker-users组授予挂载目录D:\Docker\SQL\2022\SQLTest完全控制权限但未生效。

容器启动日志

2023-01-02 17:31:56 /opt/mssql/bin/permissions_check.sh: line 4: [: : integer expression expected
2023-01-02 17:31:56 /opt/mssql/bin/permissions_check.sh: line 59: [: : integer expression expected
2023-01-02 17:31:56 SQL Server 2022 will run as non-root by default.
2023-01-02 17:31:56 This container is running as user mssql.
2023-01-02 17:31:56 To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216.
2023-01-02 17:32:59 ** ERROR: [AppLoader] Failed to load LSA: 0xc0070102
2023-01-02 17:32:59 AppLoader: Exiting with status=0xc0070102
2023-01-02 17:32:59 This program has encountered a fatal error and cannot continue running at Mon Jan  2 10:32:59 2023
2023-01-02 17:32:59 The following diagnostic information is available:
2023-01-02 17:32:59 
2023-01-02 17:32:59          Reason: 0x00000006
2023-01-02 17:32:59         Message: Termination of \SystemRoot\system32\AppLoader.exe was due to fatal error 0xC0000001
2023-01-02 17:32:59         Address: 0x3fff9c66a3ec
2023-01-02 17:32:59     Stack Trace:
2023-01-02 17:32:59                  file://package5/windows/system32/sqlpal.dll+0x0000000000209902
2023-01-02 17:32:59                  file://package5/windows/system32/sqlpal.dll+0x0000000000207E7A
2023-01-02 17:32:59                  file://package5/windows/system32/sqlpal.dll+0x000000000026A554
2023-01-02 17:32:59                  file://package5/windows/system32/sqlpal.dll+0x000000000026A3EC
2023-01-02 17:32:59                  file://package5/windows/system32/sqlpal.dll+0x0000000000268D28
2023-01-02 17:32:59                  file://package5/windows/system32/sqlpal.dll+0x0000000000201F5E
2023-01-02 17:32:59                  file://package5/windows/system32/sqlpal.dll+0x000000000039F6D8
2023-01-02 17:32:59                  file:///windows/system32/AppLoader.exe+0x0000000000002ED7
2023-01-02 17:32:59                  file:///windows/system32/AppLoader.exe+0x000000000000301D
2023-01-02 17:32:59                  file:///windows/system32/AppLoader.exe+0x000000000000303D
2023-01-02 17:32:59                  file:///windows/system32/AppLoader.exe+0x000000000000A378
2023-01-02 17:32:59                  file:///Windows/SYSTEM32/KERNEL32.DLL+0x0000000000017DF4
2023-01-02 17:32:59                  file:///windows/system32/ntdll.dll+0x000000000005B7C1
2023-01-02 17:32:59         Process: 9 - sqlservr
2023-01-02 17:32:59          Thread: 84 (application thread 0x128)
2023-01-02 17:32:59     Instance Id: 380bb4ed-2d23-4baa-8762-3d22ee32eb0d
2023-01-02 17:32:59        Crash Id: 10065506-dab0-4d16-849d-e327ed0a3da5
2023-01-02 17:32:59     Build stamp: d81e9b6de06534e649bd57dd609aa3050f5e380f361b7f8a80a80eeb71e7422c
2023-01-02 17:32:59    Distribution: Ubuntu 20.04.5 LTS
2023-01-02 17:32:59      Processors: 20
2023-01-02 17:32:59    Total Memory: 29440778240 bytes
2023-01-02 17:32:59       Timestamp: Mon Jan  2 10:32:59 2023
2023-01-02 17:32:59 Capturing a dump of 9
2023-01-02 17:33:07 Executing: /opt/mssql/bin/handle-crash.sh with parameters
2023-01-02 17:33:07      handle-crash.sh
2023-01-02 17:33:07      /opt/mssql/bin/sqlservr
2023-01-02 17:33:07      9
2023-01-02 17:33:07      /opt/mssql/bin
2023-01-02 17:33:07      /var/opt/mssql/log/
2023-01-02 17:33:07      
2023-01-02 17:33:07      380bb4ed-2d23-4baa-8762-3d22ee32eb0d
2023-01-02 17:33:07      10065506-dab0-4d16-849d-e327ed0a3da5
2023-01-02 17:33:07      
2023-01-02 17:33:07      /var/opt/mssql/log/core.sqlservr.1_2_2023_10_32_59.9
2023-01-02 17:33:07 Successfully captured dump: /var/opt/mssql/log/core.sqlservr.1_2_2023_10_32_59.9
2023-01-02 17:33:07 
2023-01-02 17:33:08 Ubuntu 20.04.5 LTS
2023-01-02 17:33:08 Capturing core dump and information to /var/opt/mssql/log...
2023-01-02 17:33:08 /bin/cat: /proc/9/maps: Permission denied
2023-01-02 17:33:09 /bin/cat: /proc/9/environ: Permission denied
2023-01-02 17:33:09 /usr/bin/find: '/proc/9/map_files': Permission denied
2023-01-02 17:33:09 /usr/bin/find: '/proc/9/map_files': Permission denied
2023-01-02 17:33:09 /usr/bin/find: '/proc/9/map_files': Permission denied
2023-01-02 17:33:09 /usr/bin/find: '/proc/9/map_files': Permission denied
2023-01-02 17:33:10 dmesg: read kernel buffer failed: Operation not permitted
2023-01-02 17:33:10 /usr/bin/timeout: failed to run command '/bin/journalctl': No such file or directory
2023-01-02 17:33:10 /usr/bin/timeout: failed to run command '/bin/journalctl': No such file or directory
2023-01-02 17:33:10 Mon Jan  2 10:33:10 UTC 2023 Capturing program information
2023-01-02 17:33:10 Dump already generated: /var/opt/mssql/log/core.sqlservr.1_2_2023_10_32_59.9, moving to /var/opt/mssql/log/core.sqlservr.9.temp/core.sqlservr.9.gdmp
2023-01-02 17:33:10 Moving logs to /var/opt/mssql/log/core.sqlservr.9.temp/log/paldumper-debug.log
2023-01-02 17:33:10 Mon Jan  2 10:33:10 UTC 2023 Capturing program binaries
2023-01-02 17:33:12 Mon Jan  2 10:33:12 UTC 2023 Not compressing the dump files, moving instead to: /var/opt/mssql/log/core.sqlservr.01_02_2023_10_33_08.9.d

容器创建命令

docker run --name SQLServer2022Test --restart always -v D:\Docker\SQL\2022\SQLTest:/var/opt/mssql -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=Aa@123456" -e "MSSQL_PID=Developer" -p 3341:1433 -d 9e28798be691

解决方案

方案1:调整WSL2挂载目录权限映射

WSL2中Windows目录挂载默认权限是777,但SQL Server容器运行的mssql用户(UID 10001)可能无法正确获取所有权。执行以下步骤:

  • 打开WSL2终端(如Ubuntu),找到Windows挂载目录:/mnt/d/Docker/SQL/2022/SQLTest
  • 修改目录所有权为UID 10001:
    sudo chown 10001:10001 /mnt/d/Docker/SQL/2022/SQLTest -R
    
  • 重新启动容器:docker restart SQLServer2022Test

方案2:禁用SQL Server容器非root运行模式

在容器创建命令中添加环境变量MSSQL_USER_ID=0,强制容器以root用户运行,绕过权限检查:

docker run --name SQLServer2022Test --restart always -v D:\Docker\SQL\2022\SQLTest:/var/opt/mssql -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=Aa@123456" -e "MSSQL_PID=Developer" -e "MSSQL_USER_ID=0" -p 3341:1433 -d 9e28798be691

注意:此方式会降低容器安全性,仅用于测试环境或临时解决。

方案3:使用WSL2内部目录作为挂载点

放弃Windows目录挂载,改用WSL2内部的目录存储SQL Server数据,避免权限映射问题:

  • 在WSL2终端创建目录:
    mkdir -p ~/docker/sql/2022/sqltest
    sudo chown 10001:10001 ~/docker/sql/2022/sqltest -R
    
  • 修改容器创建命令的挂载路径为WSL2目录:
    docker run --name SQLServer2022Test --restart always -v ~/docker/sql/2022/sqltest:/var/opt/mssql -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=Aa@123456" -e "MSSQL_PID=Developer" -p 3341:1433 -d 9e28798be691
    

方案4:调整WSL2全局权限配置

在WSL2的/etc/wsl.conf文件中添加以下配置,修改Windows挂载目录的默认UID/GID映射:

[automount]
enabled = true
options = "metadata,umask=0022,fmask=0022"
mountFsTab = false
[user]
default = root

保存后关闭所有WSL2终端,执行wsl --shutdown重启WSL2,再重新创建容器。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 09:05:39