python - 无法从 CLI 或 pyodbc 连接到 Mac 上 docker 容器中运行的 Mssql 服务器 - Azure DS 可以工作吗?

标签 python sql-server bash macos docker

我目前无法使用任何 CLI 工具或 pyodbc 连接到我在 Mac 笔记本电脑上的 Docker 容器中运行的 MSSQL 服务器。目标是使用 pyodbc 连接到数据库并与之交互。奇怪的是,使用 Azure Data Studio 我可以毫无问题地连接。

我按照以下两个教程在我的 Mac 上安装 Sql 服务器,然后恢复现有服务器的旧备份。

https://database.guide/how-to-install-sql-server-on-a-mac/ https://database.guide/how-to-restore-a-sql-server-database-on-a-mac-using-azure-data-studio/

微软建议的 sqlcmd 语句对我不起作用

    sqlcmd -S <ip_address>,1433 -U SA -P '<YourNewStrong!Passw0rd>'

记录如下:https://learn.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-2017&pivots=cs1-bash

  • 当我第一次安装docker时,我没有将内存分配增加到4GB。我在容器运行并重新启动容器和 mac 本身后这样做了。我的理解是,该内存现在应该可供该容器使用。

  • 我尝试过使用各种连接参数的 mssql、sqlcmd、pyodbc,但它们都不适合我。

  • 我可以通过 Azure Data Studio 使用以下连接信息进行连接: 连接类型:Microsoft SQL Server 服务器:本地主机,1401 身份验证类型:Sql 登录 用户名: sa 密码:

基于我通过 ADS 与数据库交互的成功,我一直假设我传递给 CLI 工具的连接参数存在错误,但此时我认为我已经尝试了几乎所有排列我能想到。我已经包含了一些连接尝试以及它们引发的错误。

我读过许多其他 github 和堆栈溢出票证,看起来这个问题的常见原因是人们没有运行他们的容器或没有使用足够复杂的 PW。这似乎不适用于我的情况。

$ sqlcmd -S 172.17.0.2,1433 -U SA -P <TestPW123$> 

结果:

SqlState HYT00, Login timeout expired
HResult 0x102, Level 11, State 0
TCP Provider: Error code 0x102
HResult 0x102, Level 11, State 0
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.
<小时/>
$ sqlcmd -S localhost,1433 -U SA -P <TestPW123$> 

结果:

sqlcmd(992,0x112ef45c0) malloc: can't allocate region
*** mach_vm_map(size=18446744073709527040) failed (error code=3)
<小时/>
$ mssql -s localhost -o 1433 -u sa -p <TestPW123$> 

结果:

Connecting to localhost...
Error: Failed to connect to localhost:1433 - connect ECONNREFUSED 127.0.0.1:1433

最佳答案

我最终通过创建一个新的 docker 容器并将数据库恢复到该容器来解决这个问题,我一直无法弄清楚之前的问题是什么,但 CLI 工具现在都可以工作了。

我仔细遵循了微软的教程,当尝试从容器外部连接时,我使用了笔记本电脑的内部网络IP。就我而言,它是 192.168.0.4,而不是一些教程引用的 127.0.0.2 IP。在成功连接时,我确实将密码用单引号引起来。连接成功如下:

'''

sqlcmd -S 192.168.0.4,1433 -U SA -P 'TestPW123$'

'''

希望这对其他人有帮助。

关于python - 无法从 CLI 或 pyodbc 连接到 Mac 上 docker 容器中运行的 Mssql 服务器 - Azure DS 可以工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56533470/

相关文章:

python - 使用 Discord.py 制作一个在预定日期发送消息的机器人

python - 填充所有日期时间列直到特定日期

sql - 计算跨越多个日期范围的记录

sql-server - 在 Entity Framework 中使用 savechanges() 时列名称无效

mysql - 项目之间共享数据..创建一个共享数据库?

regex - 在 Linux 文件名中替换双引号以及其他无效的 Windows 文件名字符

linux -/usr/bin/找到 : Argument list too long in for loop bash script

python - 在Python中将十六进制转换为负整数

python - 如何使用 Python 脚本将文件上传到 Google Drive?

linux - bash shell 自动创建用户 - adduser