从 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=我不知道你是否找到了这个问题的答案。我没有尝试从容器内连接到数据库,但我已经从容器外的 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 会导致评估密码时出错的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Docker 容器中的 python 脚本连接到 Ubuntu 上的本地 SQL 服务器