使用SQL Server Management Studio远程连接到Docker容器

72

背景:我想建立一个用于学习SQL并可使用Microsoft SQL Server Management Studio(SSMS)在Windows PC上访问的开发SQL Server。

因此,我将AdventureWorks数据库放置在运行在DigitalOcean Ubuntu 16.04服务器上的MS SQL Server 2017的Docker容器中。我可以从我的Mac远程通过SSH登录到服务器,访问容器并查询数据库。

但是,我希望在Windows PC上使用SSMS,并不确定如何开始连接远程服务器。在下面的图片中,没有选项指定SSH密钥或甚至登录Ubuntu服务器,只能访问SQL Server。

进入图像描述

这种情况可行吗?


请使用您的Droplet公共IP地址替换服务器名称,确保1433端口已开放,如有必要,请提供凭据,然后再尝试一次。 - Janshair Khan
@JanshairKhan 你如何通过SSMS提供凭据? - noobmaster69
@JanshairKhan 我的意思是如何通过SSMS提供服务器凭据? - noobmaster69
这是针对 SQL 服务器的凭据,而不是针对 Ubuntu 服务器的凭据,后者通常由 SSH 提供。我认为我需要进行双重身份验证:先通过 SSH 进入框,然后使用 SQL。但不确定在 SSMS 中如何操作。 - noobmaster69
3
如果您将SQL Server服务暴露在互联网上,您不需要使用SSH才能通过SSMS连接到SQL Server。这就是为什么您应该使用提供服务器公共IP地址的身份验证。 - Janshair Khan
显示剩余2条评论
9个回答

77

使用公共 IP 地址连接 SSMS,后跟逗号分隔符和端口号 (xxx.xx.xx.xxx,port)。

您还需要 sa 凭据才能使其正常工作。


谢谢Paul。我的问题在于,虽然我已经在IP上公开了端口,但我尝试连接SSMS时使用的是公共端口。实际上,私有端口似乎是有效的。 - noobmaster69
谢谢,它运行得非常好。为什么是逗号而不是冒号? - zolty13
谢谢,它像魔法一样奏效。我不知道逗号分隔符,我之前一直用冒号尝试哈哈。 - jvbs

75

对于您的情况,服务器名称输入框将变成服务器IP地址和端口号

远程设置图像

不需要使用ssh,只需将SQL Server服务暴露在互联网上即可。

当使用SQL Server Management Studio连接到本地机器上的docker容器时,您可以使用localhost IP。在这种情况下,服务器名称输入框将变成127.0.0.1,端口号

为了更清晰,我附加了我的SSMS连接对话框的图片


大家好,我在远程服务器上运行了一个 SQL Server,但是我无法访问远程服务器。我使用的 IP 是 xxx.xxx.xxx.xxx:3333,IP 中已经有一个端口号了,那么我该如何访问 SQL Server 的 1433 端口呢? - Manuel Gonçalves
1
连接本地Docker容器的IP 127.0.0.1是可行的。但是,如果你的计算机上有运行中的SQL Server实例,你将无法连接。 我刚刚将暴露和映射端口从1433更改为11433,并使用sa用户和密码连接到127.0.0.1,11433。 - Dragos Durlut
“localhost” 对我来说可用。 - Mr Patience

11

按照此网站的说明,我在Windows容器上解决了这个问题:https://www.sqlshack.com/sql-server-with-a-docker-container-on-windows-server-2016/。从SSMS可以立即连接到SQL Server。

如果您正在使用Linux容器,请尝试使用以下命令:

docker run --name mssqltrek-con1 -d -p 1433:1433 -e sa_password=My$eCurePwd123# -e ACCEPT_EULA=Y microsoft/mssql-server-windows-developer

运行此命令后,您可以使用以下方式检索正确的IP地址:
docker inspect -f "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" mssqltrek-con1

1
这是对我有效的解决方案,我认为这也是最通用的方式。 - Holger

7
在我的情况下,是Cisco VPN阻止主机连接到容器IP。我必须取消选中如下图所示的"Cisco Any Connect Network Access Manager",才能使其正常工作。这确保了VPN不再管理连接。

enter image description here


6

您可以连接到SQL docker服务器

  1. 使用托管docker镜像的机器的IP和端口

IP_地址,端口号

  1. 提供用户名 - sa (默认值) 和密码。

  2. 您也可以通过命令执行此操作>

docker exec -it <容器ID | 容器名称> /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P <您的密码>


3
不错。我正在寻找“IP,Port”,因为我错误地写成了“IP:Port”。 - Javid

5

这并不是与 OP 的问题完全相同,但我创建了一个 SQL Docker 容器,然后无法从 SQL Server Management Studio 登录该容器。原来我使用的 sa 密码不够安全。一旦我删除了容器并使用更安全的密码重新创建了一个容器,就可以从 SQL Server Management Studio 连接到它了。如果您没有指定足够强的密码,它仍会成功创建容器 - 只是您无法登录!希望这可以为某些人节省时间。


2
这正是我所遇到的问题。我没有使用足够强大的密码。非常好的提示。 - Vivek Kumar Singh

5

我从这个页面上得到了答案,但是我还需要自己进行调整。在我的情况下,出于某些原因,它不接受localhost,1433,但可以接受127.0.0.1,1433。


4
在我的情况下,我正在使用docker-compose,但无法连接。我通过在docker compose文件中显式指定端口来解决了这个问题。
mysqldb:
    ports:
      - "1433:1433"
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=SuperSecretPassword!23
    image: registry/mysqlimage


1
这正是我的问题。我花了2个小时尝试其他所有方法。 - Saugat Mukherjee

0

当我尝试通过SSMS连接时,我也遇到了同样的问题,即使我尝试使用localhost,1433,它也没有帮助我解决问题。 点击此处查看图片描述

经过一些研究和开发,我找到了解决方法

  • 打开Kubernetes,它将作为docker工具箱的一部分安装 (我的是win 10 home,不支持hyper-v)
  • 单击应用程序左侧的sql容器
  • 复制应用程序右侧的IP地址
  • 在SSMS中使用IP地址和端口,如XXX.XXX.XX.XX,1433,并提供凭据

点击此处查看图片描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接