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

Using SQL Server Management Studio to remote connect to docker container

上下文:我正在尝试构建一个开发 SQL 服务器,我可以继续学习 SQL 并使用 Microsoft SQL Server Management Studio (SSMS) 在 Windows PC 上访问。

所以我的 AdventureWorks 数据库位于 DigitalOcean Ubuntu 16.04 盒子上的 Docker MS SQL Server 2017 运行 容器中。从我的 Mac 我可以通过远程 SSH 连接到服务器,访问容器并查询数据库。

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

这可能吗?

使用 public IP 地址通过 SSMS 连接,后跟逗号分隔符,然后是端口 (xxx.xx.xx.xxx,port)

您还需要 sa 凭据才能完成这项工作。

在您的情况下,服务器名称输入将变为 服务器 IP,端口号

不需要ssh,只需要将SQL服务器服务暴露到互联网即可。

当使用 SQL Server Management Studio 连接到 本地计算机 上的 docker 容器时,您可以使用 localhost ip。在这种情况下,服务器名称输入将变为 127.0.0.1,port#

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

如果这也适用于 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

当我尝试通过 SSMS 连接时,我也遇到了同样的问题,即使我尝试使用本地主机,1433 它也没有帮助我。 enter image description here

经过一些研发我找到了解决它的方法

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

enter image description here

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

您可以连接到 SQL docker 服务器

  1. 使用托管docker图像的机器IP,端口

IP_Of_Machine,端口

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

  2. 你也可以用命令>

docker exec -it /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P

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

我从这个页面上的答案中获益匪浅,但是,我不得不进行自己的调整。出于某种原因,在我的例子中,它不接受 localhost,1433 但它确实接受 127.0.0.1,1433

就我而言,我使用的是 docker-compose 并且无法连接。我通过在 docker 撰写文件中明确指定端口来修复此问题。

mysqldb:
    ports:
      - "1433:1433"
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=SuperSecretPassword!23
    image: registry/mysqlimage