Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python驱动程序连接到停靠的Clickhouse服务器时出现问题_Python_Docker_Clickhouse - Fatal编程技术网

使用Python驱动程序连接到停靠的Clickhouse服务器时出现问题

使用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',

我在使用python驱动程序连接windows docker容器中的clickhouse时遇到问题。Clickhouse服务器正在我的电子驱动器上运行,位于暴露于端口8123的docker容器中。我可以在R中轻松连接此软件包,因此:

但是,当我尝试在python中使用时,我遇到了一个问题:

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