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

Docker Compose部署MSSQL启动后提示master.mdf缺失,应用无法建库

问题解决:SQL Server Docker容器无法初始化系统数据库,应用无法创建数据库

问题原因

你配置了自定义的MSSQL_DATA_DIR等目录,但容器内这些目录默认归root用户所有,而SQL Server容器以mssql用户(UID 10001)运行,没有读写权限,导致系统无法写入master.mdf等核心数据库文件,进而引发初始化错误,应用也无法正常创建数据库。

解决方案

1. 宿主机创建目录并设置权限

在宿主机上创建对应的数据、日志、备份目录,并将所有者设置为SQL Server容器使用的UID(10001):

mkdir -p ./mssql/data ./mssql/log ./mssql/backup
sudo chown -R 10001:0 ./mssql

2. 更新Docker Compose配置

添加卷挂载,将宿主机目录映射到容器内的自定义目录,同时调整健康检查间隔(原1s过于频繁):

mssql:
  container_name: MSSQL
  image: mcr.microsoft.com/mssql/server:2022-latest
  ports:
    - 1433:1433
  environment:
    - ACCEPT_EULA=Y 
    - MSSQL_SA_PASSWORD=bT!5P%4pRL4DK
    - MSSQL_DATA_DIR=/var/opt/sqlserver/data
    - MSSQL_LOG_DIR=/var/opt/sqlserver/log
    - MSSQL_BACKUP_DIR=/var/opt/sqlserver/backup
  volumes:
    - ./mssql/data:/var/opt/sqlserver/data
    - ./mssql/log:/var/opt/sqlserver/log
    - ./mssql/backup:/var/opt/sqlserver/backup
  healthcheck:
    test: ["CMD", "/opt/mssql-tools/bin/sqlcmd", "-Usa", "-PbT!5P%4pRL4DK", "-Q", "select 1"]
    interval: 5s
    retries: 20

3. 重启容器

停止并删除原有容器,重新启动服务:

docker-compose down
docker-compose up -d

验证

容器启动后,查看日志确认无权限相关错误,同时通过sqlcmd连接测试:

docker exec -it MSSQL /opt/mssql-tools/bin/sqlcmd -U sa -P bT!5P%4pRL4DK -Q "SELECT name FROM sys.databases;"

如果能正常列出系统数据库,说明初始化成功,应用也可正常创建数据库。

内容的提问来源于stack exchange,提问作者Jaczura Zoltán

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 11:52:31