无法连接到主机 VM 上的 SQL Server Express 容器

Unable to connect to SQL Server Express container on host VM

我一直在努力通过 Windows 容器在 Windows Server 2016 TP5 中获取 SQL Server 2014 Express 运行。

遵循指南 here 我可以使用 Sql Server Express 启动容器并附加数据库。

我的完整 docker run 命令:

docker run -p 1433:1433 -v C:/temp/:C:/temp/ --env sa_password=xxxx --env attach_dbs="[{'dbName': 'Docker', 'dbFiles': ['C:\temp\Docker.mdf', 'C:\temp\Docker_log.ldf']}]" microsoft/msslq-server-2014-express-windows

但是,在尝试将主机 VM(Server 2016)上的 SSMS 连接到容器的 SQL Server Express 实例时,我无法弄清楚我遗漏了什么。

我在 docker run 命令中为 SQL 服务器使用默认端口 (1433)。

Docker 主机 VM 上的版本是:1.12.1, build 23cf638

Window Server 2016 TP5 版本是:14300.rs1_release_sv.160907-0755

运行 netstat -a 确认 1433 正在容器中侦听,但 1433 在主机 VM 上侦听。

运行 docker ps 而容器是 运行 确认端口 1433 被映射为 0.0.0.0:1433->1433/tcp

要通过主机 VM 上的 SSMS 连接到容器中的 SQL 服务器实例,我使用 sa 用户并使用我检索到的容器的内部 IP 地址设置密码使用以下 powershell:

docker inspect --format "{{ .NetworkSettings.Networks.nat.IPAddress }}" <containerid>

不幸的是,SSMS 无法找到该实例,我不确定我做错了什么。

您可以为此 docker 设置 IP 地址并尝试与此连接:

docker run -p 192.168.0.2:1433:1433 -v C:/temp/:C:/temp/ --env sa_password=xxxx --env attach_dbs="[{'dbName': 'Docker', 'dbFiles': ['C:\temp\Docker.mdf', 'C:\temp\Docker_log.ldf']}]" microsoft/msslq-server-2014-express-windows

或任何适合您系统的 IP 地址。您现在可以使用此地址进行连接。

事实证明,从主机 VM 连接时,我需要指定端口和 IP。我认为我不需要这样做,因为我使用的是默认 sql 服务器端口。

通过此命令获取容器 IP:

docker inspect --format "{{ .NetworkSettings.Networks.nat.IPAddress }}" <containerid>

服务器名称:"ip","port"\"instancename" 工作并且能够在主机 VM 上使用 sqlcmd 和 SSMS 进入。