从 Docker 容器内连接到 SQL Server Express 会导致评估密码时出错

Posted

技术标签:

【中文标题】从 Docker 容器内连接到 SQL Server Express 会导致评估密码时出错【英文标题】:Connecting to SQL Server Express from within Docker Container gives an error occurred evaluating the password 【发布时间】:2017-03-13 22:05:09 【问题描述】:

我正在尝试从 Microsoft SQL Server Express 映像 (https://hub.docker.com/r/microsoft/mssql-server-windows-express/) 运行 docker 容器

例如,我尝试了以下命令(一旦我可以使用 -d 标志)

docker run -it -p 1433:1433 -e SA_PASSWORD=Mfp_4871nJUj_1-23H -e ACCEPT_EULA=Y --name to_delete_1 microsoft/mssql-server-windows-express powershell.exe
docker run -it -p 1433:1433 -e 'SA_PASSWORD=Mfp_4871nJUj_1-23H' -e 'ACCEPT_EULA=Y' --name to_delete_1 microsoft/mssql-server-windows-express powershell.exe

(不是真正的密码 - 我尝试了很多密码,因为我在下面看到的修复错误的建议之一是确保密码符合 Microsoft 的密码策略。但是对于所有密码,我都会遇到相同的错误)

我也试过小写的 sa_password

但是,每次我尝试使用任何一种方法从容器内连接 sa 帐户时

sqlcmd -U sa -P Mfp_4871nJUj_1-23H
sqlcmd -S localhost -U sa -P Mfp_4871nJUj_1-23H
sqlcmd -S localhost\sqlexpress -U sa -P Mfp_4871nJUj_1-23H
sqlcmd -U sa
sqlcmd -S localhost -U sa
sqlcmd -S localhost\sqlexpress -U sa

(输入最后3个密码)

我明白了

Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Login failed for user 'sa'..

查看它显示的 SQL Server 日志

2017-03-13 21:25:52.32 Logon       Error: 18456, Severity: 14, State: 7.
2017-03-13 21:25:52.32 Logon       Login failed for user 'sa'. Reason: An error occurred while evaluating the password. [CLIENT: 172.22.251.6]

主要建议是确保密码符合 SQL Server 的密码标准,但我认为我尝试过的所有密码都可以。

我在 Windows 10 企业版(内部版本 14393.693)上运行 Docker。 我有 Docker for Windows 版本 17.03.0-ce-win1 (10300)。

我需要做什么才能使用 microsoft/mssql-server-windows-express Docker 映像从容器内连接到 SQL Server?

谢谢

【问题讨论】:

那个错误基本上意味着登录被禁用并且密码不正确。 如果密码不正确,那么在我创建容器时听起来好像没有设置,因为我在“docker run”命令和“sqlcmd”命令之间复制了相同的密码。如果这是真的,我在运行容器时是否使用了错误的 docker 命令? 我不确定,还没有尝试在容器中运行 SQL Server。您链接的页面虽然提供了一个示例命令行 - 试试看。值得注意的是,sa_password 在示例中是小写的。 不同的帮助页面为 sa_password 提供了不同的情况。最终,以下命令起作用。 docker run -d -p 1433:1433 -e 'sa_password=' -e 'ACCEPT_EULA=Y' 最初我有一个 docker 错误被屏蔽,因为 mssql-server-windows-express 映像从顶部运行启动脚本-level 文件夹,我更改了 Dockerfile 中的工作目录。 【参考方案1】:

我不知道你是否找到了这个问题的答案。我没有尝试从容器内连接到数据库,但我已经从容器外的 SSMS 连接到它。我的关键是在原始命令中用双引号指定密码。最终命令如下所示:

docker run -d -p 1433:1433 -e sa_password="useComplexPasswordHere" -e ACCEPT_EULA=Y microsoft/mssql-server-windows-express

然后我可以通过 SSMS 连接到它。使用以下命令从 docker 容器中获取 IP 地址:

docker inspect

然后像这样通过SSMS登录数据库:

SSMS Login info

【讨论】:

从 Docker 容器中连接到 MSSQL 时遇到了同样的问题。一旦我使用双引号,它就可以正常工作。谢谢。

以上是关于从 Docker 容器内连接到 SQL Server Express 会导致评估密码时出错的主要内容,如果未能解决你的问题,请参考以下文章