使用Python驱动程序连接到停靠的Clickhouse服务器时出现问题
我在使用python驱动程序连接windows docker容器中的clickhouse时遇到问题。Clickhouse服务器正在我的电子驱动器上运行,位于暴露于端口8123的docker容器中。我可以在R中轻松连接此软件包,因此: 但是,当我尝试在python中使用时,我遇到了一个问题:使用Python驱动程序连接到停靠的Clickhouse服务器时出现问题,python,docker,clickhouse,Python,Docker,Clickhouse,我在使用python驱动程序连接windows docker容器中的clickhouse时遇到问题。Clickhouse服务器正在我的电子驱动器上运行,位于暴露于端口8123的docker容器中。我可以在R中轻松连接此软件包,因此: 但是,当我尝试在python中使用时,我遇到了一个问题: from clickhouse_driver import Client client = Client(host = 'my_ip', port = '8123',
from clickhouse_driver import Client
client = Client(host = 'my_ip',
port = '8123',
user='myun',
password='mypwd',
secure=True,
verify=False,
database='db_name')
print(client.execute('SELECT now()'))
File "d:\ProgramData\Anaconda3\lib\site-packages\clickhouse_driver\connection.py", line 249, in connect
'{} ({})'.format(e.strerror, self.get_description())
NetworkError: Code: 210. [SSL: UNKNOWN_PROTOCOL] unknown protocol (_ssl.c:777) (my_ip:8123)
有人知道问题是什么吗
更新:
已尝试安全=F并获得:
File "d:\ProgramData\Anaconda3\lib\site-packages\clickhouse_driver\connection.py", line 243, in connect
'{} ({})'.format(e.strerror, self.get_description())
SocketTimeoutError: Code: 209. None
ClickHouse服务器和客户端之间有两种通信协议:http端口8123和本机端口9000 Http适用于curl/wget和其他工具。大多数ClickHouse客户端使用http进行数据传输。在你的案件中包括R。但是有些客户机使用本机协议go,还有这个python客户机。这个协议应该比http更有效
从服务器容器中公开端口9000并在客户端中使用。这个端口在这个客户机中也是默认的。
让我们单独考虑不安全和安全的通信:
TCP非安全通信 通过端口上的本机协议与ClickHouse服务器通信 docker容器应将端口9000发布到主机 docker run-d-p 9000:9000-ulimit nofile=262144:262144 yandex/clickhouse服务器 应用程序代码 client=Clienthost='localhost', port='9000',此参数可能会丢失,因为默认情况下使用端口9000 .. 数据库class='test' TCP安全通信 clickhouse驱动程序通过端口上的本机协议与clickhouse服务器通信 docker容器应将端口9440发布到主机 docker run-d-p 9440:9440-ulimit nofile=262144:262144 yandex/clickhouse服务器 配置ClickHouse 在容器上执行交互式bash shell: docker exec-it{CONTAINER_ID}bash 在容器内进行所需的更改: 更新源 修改配置文件 apt获取安装nano 取消对配置文件中的-section的注释并保存更改 nano/etc/clickhouse server/config.xml 生成自签名证书&dhparam.pem'-文件 apt获取并安装openssl openssl-req-subc/CN=my.host.name-new-newkey rsa:2048-days 365-nodes-x509-keyout/etc/clickhouse-server/server.key-out/etc/clickhouse-server/server.crt openssl dhparam-out/etc/clickhouse server/dhparam.pem 512 4096 将所需访问模式设置为“server.key”-文件 chmod 644/etc/clickhouse server/server.key 退出交互模式 出口 重新启动容器: docker重新启动{CONTAINER_ID} 应用程序代码 client=Clienthost='localhost', port='9440',此参数可能会丢失,因为默认情况下使用端口9440 安全=正确, 验证=错误, .. 数据库class='test' 备注: Docker容器内SSL的手动配置仅用于测试。最好将所需的SSL文件和config.xml装载到容器中,或创建带有所需更改的自定义Docker映像 请参阅-文章以深入了解SSL配置您尝试过使用secure=False吗?尝试过并得到以下错误:文件d:\ProgramData\Anaconda3\lib\site packages\clickhouse\u driver\connection.py,第243行,在connect'{}{}}中。formate.strerror,self.get\u description SocketTimeoutError:Code:209。无您确定我的ip相同并且属于运行clickhouse服务器的docker容器吗?什么显示telnet my_ip 8123和从运行python代码的主机ping my_ip?是的,它是相同的ip地址,因为当我在R中运行相同的连接时,它可以工作。我还使用该IP地址从浏览器中访问服务器
File "d:\ProgramData\Anaconda3\lib\site-packages\clickhouse_driver\connection.py", line 243, in connect
'{} ({})'.format(e.strerror, self.get_description())
SocketTimeoutError: Code: 209. None