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
相关产品推荐
相关产品推荐

