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

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密码,导致登录失败。

解决步骤

  1. 停止并移除现有容器
    执行命令:
    docker-compose down
    
  2. 清理本地持久化的master数据库文件
    删除本地目录C:\ChrisDev\Databases\sql_server\master下的所有文件(或者直接删除整个master目录)。
  3. 重新启动容器
    执行命令:
    docker-compose up -d
    
    此时SQL Server会重新初始化master数据库,使用你当前设置的SA_PASSWORD作为sa用户密码。

额外注意事项

  • 确认你的sa密码符合SQL Server的复杂度要求:至少8个字符,包含大写字母、小写字母、数字和特殊符号(你的MyPass@word是符合要求的)。
  • 后续如果需要修改sa密码,不要依赖SA_PASSWORD环境变量(仅首次初始化有效),需要进入容器执行SQL命令修改:
    docker exec -it sql-server /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 旧密码
    
    然后在sqlcmd中执行:
    ALTER LOGIN sa WITH PASSWORD='新密码';
    GO
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 12:07:10