从 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 会导致评估密码时出错的主要内容,如果未能解决你的问题,请参考以下文章

SQL 内连接到同一个表,在多个列上,多次

无法从 Docker 容器连接到外部 SQL Server

无法从 docker 容器连接到 SQL Server

如何从 Docker 容器中的 python 脚本连接到 Ubuntu 上的本地 SQL 服务器

无法使用桥接网络模式从 docker 容器连接到远程 SQL 服务器

无法连接到 docker 容器内的 SQL Server