Docker容器中SQL Server连接失败:sa用户登录出错求助
问题分析与解决方法
你的docker-compose.yml配置里,核心问题出在持久化的master数据库文件覆盖了SA密码设置,具体原因和解决步骤如下:
关键问题点
你通过volumes挂载了本地目录C:\ChrisDev\Databases\sql_server\master到容器内的/usr/share/sql_master,并且通过环境变量MSSQL_MASTER_DATA_FILE和MSSQL_MASTER_LOG_FILE指定了master数据库的存储路径。
SQL Server的SA_PASSWORD环境变量只在第一次初始化master数据库时生效。如果你的本地master目录已经存在之前容器生成的master.mdf和mastlog.ldf文件,那么重启容器时,SQL Server会直接加载这些已有文件,此时你设置的SA_PASSWORD=MyPass@word不会覆盖原有数据库中的sa密码,导致登录失败。
解决步骤
- 停止并移除现有容器
执行命令:docker-compose down - 清理本地持久化的master数据库文件
删除本地目录C:\ChrisDev\Databases\sql_server\master下的所有文件(或者直接删除整个master目录)。 - 重新启动容器
执行命令:
此时SQL Server会重新初始化master数据库,使用你当前设置的docker-compose up -dSA_PASSWORD作为sa用户密码。
额外注意事项
- 确认你的sa密码符合SQL Server的复杂度要求:至少8个字符,包含大写字母、小写字母、数字和特殊符号(你的
MyPass@word是符合要求的)。 - 后续如果需要修改sa密码,不要依赖
SA_PASSWORD环境变量(仅首次初始化有效),需要进入容器执行SQL命令修改:
然后在sqlcmd中执行:docker exec -it sql-server /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 旧密码ALTER LOGIN sa WITH PASSWORD='新密码'; GO
内容的提问来源于stack exchange,提问作者ChrisAsi71
相关产品推荐
相关产品推荐

