使用 DBI 通过 RStudio 连接到 Docker Image 中的数据库时出现问题

问题描述 投票:0回答:1

我正在尝试连接到我使用 DBI 启动的本地 Docker 映像中的数据库,但遇到了一些非常神秘的错误......我已经成功启动了 Docker 容器(下面显示了

docker ps -a
的结果) :

CONTAINER ID   IMAGE                                        COMMAND             CREATED          STATUS          PORTS                      NAMES
131ab042012c   mcr.microsoft.com/mssql/server:2017-latest   "/opt/mssql/bin/nonr…"   27 minutes ago   Up 27 minutes   127.0.0.1:1433->1433/tcp   admiring_northcutt

然后我尝试通过以下方式连接:

pool<- pool::dbPool(odbc::odbc(),
                    Driver   = "ODBC Driver 17 for SQL Server",
                    Server   = "localhost",
                    Database = "master",
                    UID      = "sa",
                    PWD      = "***********",
                    Port     = 1433)

并收到错误:

Error: nanodbc/nanodbc.cpp:1021: 00000: [Microsoft][ODBC Driver 17 for SQL Server]Client unable to establish connection  [Microsoft][ODBC Driver 17 for SQL Server]Invalid connection string attribute 

使用

odbc::odbcListDrivers()
检查我的 odbc 驱动程序返回以下输出,因此驱动程序似乎存在。

                           name   attribute                                   value
1 ODBC Driver 17 for SQL Server Description Microsoft ODBC Driver 17 for SQL Server
2 ODBC Driver 17 for SQL Server      Driver    /usr/local/lib/libmsodbcsql.17.dylib
3 ODBC Driver 17 for SQL Server  UsageCount                                       2

此外,执行容器并尝试通过命令连接到数据库:

docker exec -it <container-name> /bin/bash

/opt/mssql-tools/bin/sqlcmd -S 127.0.0.1 -U sa -P '<password>'   

编辑:上述方法现在有效,我可以在数据库中主动查询。我知道错误不可能是由于登录凭据无效造成的,因为我使用的是与上面在容器中运行的完全相同的凭据。

同样的过程适用于同事,所以我想知道这是否是我的设置的本地问题。我们已经按照此链接中的建议比较了我们的 .ini 文件,它们是相同的,我已经干净地重新安装了 Docker,我什至运行了同事的相同容器,但没有成功。知道这里会发生什么吗?

电脑规格:

MacBook Pro (16-inch 2019)
OS: macOS Monterey (version 12.2.1)
Processor: 2.3 GHz 8-Core Intel Core i9
Memory: 16GB 2667MHz DDR4
Startup Disk: Macintosh HD
Graphics: AMD Radeon Pro 5500M 4 GB

Rstudio 版本:2021.09.0 Build 351

OpenSSL 版本:1.1

r sql-server docker tcp odbc
1个回答
0
投票

我意识到我晚了一年多,但请尝试将

TrustServerCertificate = "yes"
添加到您的连接定义中。

                    Driver   = "ODBC Driver 17 for SQL Server",
                    Server   = "localhost",
                    Database = "master",
                    UID      = "sa",
                    PWD      = "***********",
                    Port     = 1433,
                    TrustServerCertificate = "yes")
© www.soinside.com 2019 - 2024. All rights reserved.