metabase-clickhouse-driver icon indicating copy to clipboard operation
metabase-clickhouse-driver copied to clipboard

Unable to connect to another docker container running clickhouse

Open sindhubb opened this issue 1 year ago • 2 comments

Describe the bug

Steps to reproduce

  1. Run Metabase with Clickhouse driver plugin
  2. Try to add clickhouse as database
  3. 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

sindhubb avatar Jan 10 '24 09:01 sindhubb

I am able to add postgres database (to metabase ui) which is also running as a container in my docker.

sindhubb avatar Jan 10 '24 09:01 sindhubb

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.

slvrtrn avatar Jan 10 '24 17:01 slvrtrn