metabase-clickhouse-driver
metabase-clickhouse-driver copied to clipboard
Unable to connect to another docker container running clickhouse
Describe the bug
Steps to reproduce
- Run Metabase with Clickhouse driver plugin
- Try to add clickhouse as database
- Error
Expected behaviour
Expect to connect to clickhouse running on Docker container via Metabase container. I have made metabase part of the docker network locally as well with docker network connect <local-network-name>.
Error log
I see the following error in logs of metabase container:
2024-01-10 14:36:05 at com.clickhouse.jdbc.SqlExceptionUtils.handle(SqlExceptionUtils.java:85)
2024-01-10 14:36:05 at com.clickhouse.jdbc.SqlExceptionUtils.create(SqlExceptionUtils.java:31)
2024-01-10 14:36:05 at com.clickhouse.jdbc.SqlExceptionUtils.handle(SqlExceptionUtils.java:90)
2024-01-10 14:36:05 at com.clickhouse.jdbc.internal.ClickHouseConnectionImpl.getServerInfo(ClickHouseConnectionImpl.java:131)
2024-01-10 14:36:05 at com.clickhouse.jdbc.internal.ClickHouseConnectionImpl.<init>(ClickHouseConnectionImpl.java:335)
2024-01-10 14:36:05 at com.clickhouse.jdbc.internal.ClickHouseConnectionImpl.<init>(ClickHouseConnectionImpl.java:288)
2024-01-10 14:36:05 at com.clickhouse.jdbc.ClickHouseDriver.connect(ClickHouseDriver.java:157)
2024-01-10 14:36:05 at com.clickhouse.jdbc.ClickHouseDriver.connect(ClickHouseDriver.java:41)
2024-01-10 14:36:05 at metabase.plugins.jdbc_proxy$proxy_driver$reify__87458.connect(jdbc_proxy.clj:37)
2024-01-10 14:36:05 at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
2024-01-10 14:36:05 at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
2024-01-10 14:36:05 at clojure.java.jdbc$get_driver_connection.invokeStatic(jdbc.clj:271)
2024-01-10 14:36:05 at clojure.java.jdbc$get_driver_connection.invoke(jdbc.clj:250)
2024-01-10 14:36:05 at clojure.java.jdbc$get_connection.invokeStatic(jdbc.clj:411)
2024-01-10 14:36:05 at clojure.java.jdbc$get_connection.invoke(jdbc.clj:274)
2024-01-10 14:36:05 at clojure.java.jdbc$db_query_with_resultset_STAR_.invokeStatic(jdbc.clj:1111)
2024-01-10 14:36:05 at clojure.java.jdbc$db_query_with_resultset_STAR_.invoke(jdbc.clj:1093)
2024-01-10 14:36:05 at clojure.java.jdbc$query.invokeStatic(jdbc.clj:1182)
2024-01-10 14:36:05 at clojure.java.jdbc$query.invoke(jdbc.clj:1144)
2024-01-10 14:36:05 at clojure.java.jdbc$query.invokeStatic(jdbc.clj:1160)
2024-01-10 14:36:05 at clojure.java.jdbc$query.invoke(jdbc.clj:1144)
2024-01-10 14:36:05 at metabase.driver.sql_jdbc.connection$can_connect_with_spec_QMARK_.invokeStatic(connection.clj:326)
2024-01-10 14:36:05 at metabase.driver.sql_jdbc.connection$can_connect_with_spec_QMARK_.invoke(connection.clj:323)
2024-01-10 14:36:05 at metabase.driver.sql_jdbc.connection$can_connect_QMARK_$fn__50299.invoke(connection.clj:335)
2024-01-10 14:36:05 at metabase.driver.sql_jdbc.connection$do_with_connection_spec_for_testing_connection$fn__50281.invoke(connection.clj:311)
2024-01-10 14:36:05 at metabase.util.ssh$do_with_ssh_tunnel.invokeStatic(ssh.clj:162)
2024-01-10 14:36:05 at metabase.util.ssh$do_with_ssh_tunnel.invoke(ssh.clj:151)
2024-01-10 14:36:05 at metabase.driver.sql_jdbc.connection$do_with_connection_spec_for_testing_connection.invokeStatic(connection.clj:309)
2024-01-10 14:36:05 at metabase.driver.sql_jdbc.connection$do_with_connection_spec_for_testing_connection.invoke(connection.clj:305)
2024-01-10 14:36:05 at metabase.driver.sql_jdbc.connection$can_connect_QMARK_.invokeStatic(connection.clj:334)
2024-01-10 14:36:05 at metabase.driver.sql_jdbc.connection$can_connect_QMARK_.invoke(connection.clj:330)
2024-01-10 14:36:05 at metabase.driver.sql_jdbc$fn__109967.invokeStatic(sql_jdbc.clj:53)
2024-01-10 14:36:05 at metabase.driver.sql_jdbc$fn__109967.invoke(sql_jdbc.clj:51)
2024-01-10 14:36:05 at clojure.lang.MultiFn.invoke(MultiFn.java:234)
2024-01-10 14:36:05 at metabase.driver.util$can_connect_with_details_QMARK_$fn__58428.invoke(util.clj:147)
2024-01-10 14:36:05 at clojure.core$binding_conveyor_fn$fn__5823.invoke(core.clj:2047)
2024-01-10 14:36:05 at clojure.lang.AFn.call(AFn.java:18)
2024-01-10 14:36:05 at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
2024-01-10 14:36:05 at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
2024-01-10 14:36:05 at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
2024-01-10 14:36:05 ... 1 more
2024-01-10 14:36:05 Caused by: java.net.UnknownHostException: clickhouse
2024-01-10 14:36:05 at java.base/java.net.AbstractPlainSocketImpl.connect(Unknown Source)
2024-01-10 14:36:05 at java.base/java.net.Socket.connect(Unknown Source)
2024-01-10 14:36:05 at java.base/sun.net.NetworkClient.doConnect(Unknown Source)
2024-01-10 14:36:05 at java.base/sun.net.www.http.HttpClient.openServer(Unknown Source)
2024-01-10 14:36:05 at java.base/sun.net.www.http.HttpClient.openServer(Unknown Source)
2024-01-10 14:36:05 at java.base/sun.net.www.http.HttpClient.<init>(Unknown Source)
2024-01-10 14:36:05 at java.base/sun.net.www.http.HttpClient.New(Unknown Source)
2024-01-10 14:36:05 at java.base/sun.net.www.http.HttpClient.New(Unknown Source)
2024-01-10 14:36:05 at java.base/sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
2024-01-10 14:36:05 at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source)
2024-01-10 14:36:05 at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
2024-01-10 14:36:05 at java.base/sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
2024-01-10 14:36:05 at java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(Unknown Source)
2024-01-10 14:36:05 at java.base/sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source)
2024-01-10 14:36:05 at com.clickhouse.client.http.HttpUrlConnectionImpl.post(HttpUrlConnectionImpl.java:225)
2024-01-10 14:36:05 at com.clickhouse.client.http.ClickHouseHttpClient.send(ClickHouseHttpClient.java:124)
2024-01-10 14:36:05 at com.clickhouse.client.AbstractClient.execute(AbstractClient.java:280)
2024-01-10 14:36:05 at com.clickhouse.client.ClickHouseClientBuilder$Agent.sendOnce(ClickHouseClientBuilder.java:282)
2024-01-10 14:36:05 at com.clickhouse.client.ClickHouseClientBuilder$Agent.send(ClickHouseClientBuilder.java:294)
2024-01-10 14:36:05 at com.clickhouse.client.ClickHouseClientBuilder$Agent.execute(ClickHouseClientBuilder.java:349)
2024-01-10 14:36:05 at com.clickhouse.client.ClickHouseClient.executeAndWait(ClickHouseClient.java:1056)
2024-01-10 14:36:05 at com.clickhouse.client.ClickHouseRequest.executeAndWait(ClickHouseRequest.java:2154)
2024-01-10 14:36:05 at com.clickhouse.jdbc.internal.ClickHouseConnectionImpl.getServerInfo(ClickHouseConnectionImpl.java:128)
2024-01-10 14:36:05 ... 37 more
2024-01-10 14:36:05 2024-01-10 09:06:05,174 DEBUG middleware.log :: POST /api/database 400 30.8 ms (0 DB calls)
2024-01-10 14:36:05 {:message
2024-01-10 14:36:05 "clickhouse, server ClickHouseNode [uri=http://clickhouse:8125/default, options={use_server_time_zone_for_dates=true,use_no_proxy=false,product_name=metabase/1.2.2}]@-1732969528"}
Configuration
Environment
- metabase-clickhouse-driver version: 1.22
- Metabase version: v0.48.2
- OS: MacOS 14.2.1
ClickHouse server
- ClickHouse Server version:
clickhouse/clickhouse-server:latest-alpine
I am able to add postgres database (to metabase ui) which is also running as a container in my docker.
That's how I run it for the tests and local development as well (please ignore clickhouse_tls): https://github.com/ClickHouse/metabase-clickhouse-driver/blob/master/docker-compose.yml. Paths are assuming that the root folder is the Metabase repo, and the driver repo is checked out to modules/drivers/clickhouse.
If we reduce docker-compose.yml to something like:
version: '3.8'
services:
clickhouse:
image: 'clickhouse/clickhouse-server:23.12-alpine'
container_name: 'metabase-driver-clickhouse-server'
ports:
- '8123:8123'
- '9000:9000'
ulimits:
nofile:
soft: 262144
hard: 262144
metabase:
image: metabase/metabase:v0.48.1
container_name: metabase-with-clickhouse-driver
environment:
'MB_HTTP_TIMEOUT': '5000'
'JAVA_TIMEZONE': 'UTC'
ports:
- '3000:3000'
volumes:
- './clickhouse.metabase-driver.jar:/plugins/clickhouse.jar'
Having clickhouse.metabase-driver.jar next to it, does it work for you? This should not require docker network connect cause they will be in the same network already, and I suspect something might go wrong with that command.