我使用以下命令创建了一个docker容器:
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=MyStr@ngPassw0rd' -e 'MSSQL_PID=Express' -p 1433:1433 -d microsoft/mssql-server-linux:latest
我想使用SSMS从我的主机连接到该数据库。 我应该在SSMS登录对话框中使用哪些参数?
我当前的条目:
但是我遇到了这个错误:
标题:连接到服务器
无法连接到本地主机:。
其他信息:
建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称正确,并且已将SQL Server配置为允许远程连接。 (提供者:命名管道提供程序,错误:40-无法打开与SQL Server的连接)(Microsoft SQL Server,错误:53)
找不到网络路径
似乎我无法“查看”数据库。
我的连接字符串有问题吗?还是无法以这种方式连接?
答案 0 :(得分:2)
如果您在Windows和Linux容器上使用Docker CE,请在环境变量周围指定双引号,以便对其进行识别:
docker run -e "ACCEPT_EULA=Y" -e 'SA_PASSWORD=MyStr@ngPassw0rd" -e "MSSQL_PID=Express" -p 1433:1433 -d microsoft/mssql-server-linux:latest
您将可以使用SSMS进行连接。在这种情况下,使用默认的1433端口,可以将.
或localhost
指定为服务器名称。您还可以从仅指定您的计算机名称的远程主机连接到容器实例(假设防火墙规则允许传入的端口1433通信)。
使用单引号引起来的值将无法识别,并且容器将立即停止。您可以使用docker logs <container-name>
查看SQL Server错误日志中的消息以进行故障排除。以下是使用原始问题命令使用显式容器名称(建议使用它来简化此类任务)的示例:
docker run --name sql1 -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=MyStr@ngPassw0rd' -e 'MSSQL_PID=Express' -p 1433:1433 -d microsoft/mssql-server-linux:latest
c3de002fc22106e53c9b165c7f444905b5ef1bb1596eddf1b097cdd6d60e6c75
docker logs sql1
必须接受SQL Server最终用户许可协议(EULA) SQL Server可以启动之前。该产品的许可条款可以是 从http://go.microsoft.com/fwlink/?LinkId=746388下载。
您可以通过指定--accept-eula命令行来接受EULA 选项,设置ACCEPT_EULA环境变量或使用 mssql-conf工具。
从记录的消息中可以看到,SQL实例已停止(正在停止容器),因为SQL Server由于单引号无法识别EULA被接受。