Docker Compose部署MSSQL无法读取.env文件致登录失败问题
解决MSSQL Docker容器SA密码登录失败问题
问题背景
- 已配置
.envs/.local/.mssql环境文件:
ACCEPT_EULA=Y MSSQL_SA_PASSWORD=12Password34
docker-compose.yml中配置了MSSQL服务,但执行docker-compose up -d --build时出现警告:
WARN[0000] The "SA_PASSWORD" variable is not set. Defaulting to a blank string.
- 容器启动后日志出现SA登录失败错误:
Logon Error: 18456, Severity: 14, State: 8. Logon Login failed for user 'sa'. Reason: Password did not match that for the login provided.
解决方案
1. 统一环境变量名称
环境文件中定义的变量是MSSQL_SA_PASSWORD,但docker-compose.yml的healthcheck和command里误用了$SA_PASSWORD,Docker找不到该变量才抛出警告并设为空值。需将所有$SA_PASSWORD替换为$MSSQL_SA_PASSWORD:
修改后的healthcheck部分:
healthcheck: test: [ "CMD", "/opt/mssql-tools/bin/sqlcmd", "-S", "localhost", "-U", "sa", "-P", "$MSSQL_SA_PASSWORD", "-Q", "SELECT 1" ] interval: 30s timeout: 30s retries: 3
修改后的command中的密码引用:
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $MSSQL_SA_PASSWORD -i /sql_scripts/db_setup.sql
2. 修正启动脚本执行顺序
原command先执行前台进程sqlservr,导致后续初始化脚本永远无法运行。需调整为后台启动SQL Server,等待服务就绪后再执行脚本:
更新后的完整command:
command: /bin/bash -c ' # 后台启动SQL Server /opt/mssql/bin/sqlservr & SQLPID=$! # 轮询等待SQL Server就绪 until /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $MSSQL_SA_PASSWORD -Q "SELECT 1" > /dev/null 2>&1; do echo "等待SQL Server启动..." sleep 5 done # 仅首次启动时执行初始化脚本 if [ ! -f /sql_scripts/init_done.flag ]; then apt-get update && apt-get install -y mssql-tools unixodbc-dev /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $MSSQL_SA_PASSWORD -i /sql_scripts/db_setup.sql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $MSSQL_SA_PASSWORD -i /sql_scripts/second_db_setup.sql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $MSSQL_SA_PASSWORD -i /sql_scripts/third_db_setup.sql touch /sql_scripts/init_done.flag fi # 等待SQL Server主进程,保持容器运行 wait $SQLPID '
3. 清理旧数据卷(关键步骤)
首次启动时错误的空密码已写入持久化数据卷db-data,即使修正配置,旧密码依然会生效。需删除旧卷:
# 停止并删除容器 docker-compose down # 删除db-data卷(替换为你的实际项目卷名,通常是[项目目录名]_db-data) docker volume rm your_project_name_db-data
完成以上修改后,重新启动容器:
docker-compose up -d --build
内容的提问来源于stack exchange,提问作者UpDawg
相关产品推荐
相关产品推荐

