Docker Compose部署SQL Server容器启动失败问题求助
Docker Compose部署SQL Server 2019容器失败的排查与解决
针对你遇到的SQL Server容器启动报错ERROR: [AppLoader] Failed to load LSA: 0xc0070102及权限拒绝问题,结合单独docker run可正常运行的情况,排查方向和解决方法如下:
1. 检查数据卷挂载的权限配置
SQL Server镜像默认使用mssql用户(UID 10001)运行,若你在Compose中挂载了宿主本地目录作为数据卷,该目录的权限可能不允许mssql用户读写:
- 执行命令修改宿主目录权限:
sudo chown 10001:10001 /path/to/your/sql/data/directory - 优先使用Docker命名卷替代宿主目录挂载,命名卷会自动处理权限问题,示例配置:
volumes: sqlserver-data:
2. 确认必填环境变量是否配置正确
SQL Server容器启动必须设置以下两个环境变量,缺失或配置错误会导致启动失败:
ACCEPT_EULA=Y:接受SQL Server最终用户许可协议MSSQL_SA_PASSWORD:SA账户密码,需符合复杂度要求(至少8字符,包含大小写、数字、特殊字符)
完整的Compose服务示例:
services: sqlserver: image: mcr.microsoft.com/mssql/server:2019-latest environment: - ACCEPT_EULA=Y - MSSQL_SA_PASSWORD=YourStrong!Passw0rd volumes: - sqlserver-data:/var/opt/mssql ports: - "1433:1433" volumes: sqlserver-data:
3. 调整Docker资源分配(Windows/macOS环境)
若使用Docker Desktop,SQL Server启动至少需要2GB内存,内存不足会触发LSA加载失败报错:
- 打开Docker Desktop设置,进入Resources > Advanced,将内存分配调整至2GB以上,重启Docker后重试。
4. 解决Linux环境下的SELinux限制
Linux系统中SELinux可能会阻止容器访问宿主目录,临时关闭SELinux测试:
sudo setenforce 0
若容器能正常启动,为挂载目录添加SELinux上下文以长期解决:
sudo chcon -Rt svirt_sandbox_file_t /path/to/your/sql/data/directory
5. 排查Compose配置中的其他冲突
- 避免为SQL Server服务设置
user: root,强行切换用户会破坏镜像内部的权限结构; - 检查端口是否被其他进程占用,确保1433端口未被宿主或其他容器占用;
- 若以上方法无效,可临时添加
privileged: true到SQL Server服务配置中测试,但该选项会赋予容器极高权限,不建议长期使用。
内容的提问来源于stack exchange,提问作者Việt Tùng Nguyễn
相关产品推荐
相关产品推荐

