sql-server - 无法连接到 docker 托管的 MSSQL

标签 sql-server docker

我在 [本教程]( https://hub.docker.com/r/microsoft/mssql-server-linux/
) 我尝试通过 sqlcmd 连接到我的 docker 托管的 MSSQL。

我从 Windows 在 PowerShell 中执行了以下操作:

docker run -e 'ACCEPT_EULA=Y' --name mssql -e \
 'SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 -it \
 -d microsoft/mssql-server-linux:latest /bin/bash

注意:添加“-it”和“/bin/bash”是因为如果没有检测到任何事件,docker将自动停止。

我跑了docker container ls -a验证它正在运行:
docker container Is -a 
CONTAINER ID      IMAGE                               COMMAND       CREATED          STATUS          PORTS                    NAMES 
92cfc504ab70      microsoft/mssql-server-linux:latest "/bin/bash"   27 minutes ago   Up 27 minutes   0.0.0.0:1433->1433/tcp  mssql 

我在我的主机上运行了 telnet local-ip:1433,它工作正常。

当我执行以下操作时,问题出在:
docker exec -it mssql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa \
 -P yourStrong(!)Password

错误:

Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired. Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Error code 0x2749. Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online..



我还尝试通过我的主机使用 powershell 进行连接
链接:https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker

命令:
sqlcmd -S 192.168.0.110,1433 -U SA -P yourStrong(!)Password

注意:192.168.0.110(通过在主机上运行 ipconfig 得到这个。)

有什么帮助吗?

最佳答案

经过一些试验和错误,并重新阅读文档,我发现了问题。当我在 PowerShell 中执行我的命令时,我应该对参数使用双引号。

我正在寻找错误的方向。最初我执行了命令:

docker run -e 'ACCEPT_EULA=Y' --name mssql -e \
 'SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 -d \
 microsoft/mssql-server-linux:latest

每次启动时容器都会自动停止。
然后,我做了一些谷歌搜索,发现:
docker run -e 'ACCEPT_EULA=Y' --name mssql -e \
 'SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 -it -d \
 microsoft/mssql-server-linux:latest /bin/bash

表面上看起来还不错。它在 PowerShell 中成功执行。它不再自动停止。如果我深入挖掘使用
docker container logs mssql

查看 mssql 的日志。没有给出错误,只是我没有看到很多信息,这让我认为我的命令没有问题。

但是运行这些命令的正确方法是使用双引号。
链接:https://hub.docker.com/r/microsoft/mssql-server-linux/
重要说明:如果您在 Windows 上使用 PowerShell 来运行这些命令,请使用双引号而不是单引号。

例如。
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=YourStrong!Passw0rd" -p 1401:1433 --name sql1 -d microsoft/mssql-server-linux:2017-latest

我还可以使用 SSMS 登录:
  • 服务器名称:Hostip,1401
  • 用户名:sa
  • 密码:您的密码
  • 关于sql-server - 无法连接到 docker 托管的 MSSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49686882/

    相关文章:

    sql - 如果 SQL Server 单元格中有字母,则删除行

    docker - 在Docker容器之间共享IP地址

    sql - LAG 可以和 HAVING 一起使用吗?

    sql - 解析某些 xml 时遇到问题

    python - 使用 Flask-SQLAlchemy 和 pyodbc 在 Flask 中连接到 MSSQL

    docker - 我如何在主管中执行脚本?

    docker - 如何在 ipython 中渲染 matplotlib 图

    mysql - 在组织之间交换数据转储的最佳方法

    azure - 使用来自不同来源的多个容器通过 Docker Compose 部署到 Azure 应用服务

    docker - 运行多个 podman 容器,例如 docker-compose