【问题标题】:Cannot connect with SSMS to SQL Server on Docker无法通过 SSMS 连接到 Docker 上的 SQL Server
【发布时间】:2020-09-03 15:22:48
【问题描述】:

我已经关注了微软官方documentation,并且已经安装了SQL Server Docker镜像

因此,我在 Docker 上运行了一个 SQL Server 映像,其 IP 地址为 172.17.0.2

我还可以使用 sqlcmd 和我的虚拟密码轻松连接到它

问题是我无法通过 SSMS 连接到它:

Login failed for user 'sa'. (Microsoft SQL Server, Error: 18456)

当然我在发布这个问题之前阅读了其他 StackOverflow posts 并且我尝试了多次登录:

  • 本地主机,1433
  • 本地主机:1433
  • 172.17.0.2,1433
  • 等等……

如果 localhost 和 docker 镜像的 IP 地址都不能正常工作,我该如何连接?

【问题讨论】:

  • 你是如何启动你的容器的?使用docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Your$trongPw" -p 1433:1433 时,请勿在密码周围加上任何引号。另请注意,在 Windows Powershell 中运行时使用双引号,在 Linux 中使用单引号。运行 Express 版本时,您必须连接到 172.17.0.2,1433\SQLEXPRESS。有防火墙阻止 SSMS 连接吗?
  • 该错误表明您已连接到容器实例。单击错误对话框中的显示详细信息以查看 state code 是否提供更多信息。此外,请检查容器中的 sql server 错误日志以获取有关登录尝试失败的其他信息:cat /var/opt/mssql/log/errorlog
  • docker 实例是否在您运行 sql 客户端的同一台计算机上运行?
  • @rfkortekaas,是的,我在同一台计算机上安装了 SSMS 和 Docker
  • 嗨@TWP,命令docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=HelloWorld123" -p 1433:1433 -t 3c7ee124fdd6返回给我Error response from daemon: driver failed programming external connectivity on endpoint vibrant_shirley (064f1bfa7b66d68995f76c98cb80594807ac30e9659b35e1f217885dedb9094b): Bind for 0.0.0.0:1433 failed: port is already allocated.

标签: sql-server docker containers ssms sqlcmd


【解决方案1】:

就我而言,我一直在本地机器上运行 MSSQL Sever + 在 docker 上运行一个。关闭主机上的 mssql 服务器服务解决了这个问题。

[编辑]:

添加 Francesco 指出的技术原因,它通常适用于任何端口:

这并不奇怪,如果 1433 端口被你的主机 MSSQL 占用,你的 docker 上的 MSSQL 不能使用相同的端口。

【讨论】:

  • 这很奇怪,谢谢,如果这是问题,我永远不会意识到。
  • 为我工作。谢谢
  • 我们如何检查是否是这种情况?
  • @Koder101,这并不奇怪,如果端口 1433 被您的主机 MSSQL 占用,则 docker 上的 MSSQL 不能使用相同的端口。
【解决方案2】:

我想,如果你按照MS文档,你的初始化容器的cmd缺少MSSQL_PID参数,我不知道为什么SSMS需要它,我们稍后会找到。但是你应该试试这个

 docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Helloworld123" -e "MSSQL_PID=Express" -p 1433:1433  --name sql1 -d mcr.microsoft.com/mssql/server:2019-CU3-ubuntu-18.04

【讨论】:

  • 如果您不提供 MSSQL_PID,您的版本将成为开发者版本。
【解决方案3】:

停止本地 mssql 服务器;

Windows + R => SQLServerManager13.msc(已安装版本 13)

尝试后我的问题解决了

【讨论】:

    【解决方案4】:

    服务器设置看起来不错。您只需要提供 'localhost' 而不是 'localhost,1433'。

    【讨论】:

      【解决方案5】:

      我有点晚了,但我希望这个答案对未来的人有所帮助。 伙计们,我遇到了与报告的完全相同的问题。

      对我有用的是如下连接:

      127.0.0.1\{container_name},1433
      

      我使用了以下图片:

      mcr.microsoft.com/mssql/server
      

      使用 MSSQL_PID Express 和端口:

      • “1433:1433”
      • “1434:1434/udp”

      【讨论】:

        【解决方案6】:

        连接字符串没问题。问题在于提供的凭据。可能在创建过程中添加的密码周围加上引号。

        你能运行docker exec -it sql1 "bash" 这将提供一个容器外壳。运行echo $SA_PASSWORD 以查看密码是否包含引号以及是哪一个。复制结果并将其粘贴到密码字段中,看看它是否有效。

        您也可以使用以下命令更改密码:

        docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd `
           -S localhost -U SA -P "<YourStrong@Passw0rd>" `
           -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"
        

        【讨论】:

        • 谢谢@rfkortekaas,以纯文本形式显示密码的好技巧,没有引号:snipboard.io/6bAInJ.jpg
        • 我也把密码从HelloWorld123改成了HelloHell123,不高兴。但我可以通过命令行登录,只是 SSMS 无法使用相同的用户/密码登录
        【解决方案7】:

        SQL server 登录错误码18456的可能原因

        SQL Server 登录失败可能由于各种原因而发生。

        • 输入的用户名或密码不正确。
        • 启用了错误的身份验证模式。
        • 一个用户名在不同的服务器上可能有不同的密码。所以用户必须确保他输入了正确的组合。
        • 用户帐户的密码已过期。
        • 用户帐户已从服务器中删除。

        也许,要解决这个问题,试试这个

        第一次启动 SQL Server 时,可能会在安全选项下启用“Windows 身份验证”。在这种情况下,服务器将无法识别用户,用户将收到登录失败 18456 错误。

        这篇文章也值得一看:- Unable to login to SQL Server + SQL Server Authentication + Error: 18456

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多