I can't connect to Clickhouse using Docker compose.
I have the following docker compose file:
services:
my-clickhouse-db:
image: clickhouse/clickhouse-server:23.9.1.1854-alpine
ulimits:
nofile:
soft: 262144
hard: 262144
ports:
- 18123:8123
- 9000:9000
my-service:
build:
context: .
target: myService
ports:
- 8082:8082
depends_on:
- my-clickhouse-db
And I use Clickhouse Java Client https://clickhouse.com/docs/en/integrations/java#java-client
Then I try to connecto to Clickhouse the following way from my-service:
val clickHouseNode = ClickHouseNode.of("http://my-clickhouse-db:18123")
val clickhouseClient = ClickHouseClient.newInstance(clickHouseNode.protocol)
clickHouseClient.read(clickHouseNode)
.format(ClickHouseFormat.JSONEachRow)
.query("select * from my_tabke")
.executeAndWait()
.records()
But I get an error:
com.clickhouse.client.ClickHouseException: Connection refused, server ClickHouseNode [uri=http://my-clickhouse-db:18123/default]@-218511710
What do I do wrong? And how to fix the error?
Thanks you David! His comment answered my question. It turns out I misunderstood how port mapping works in Docker Compose, which caused me to use the wrong port to connect to Clickhouse. I should have used port 8123 from my-service to connect to Clickhouse.
The followin code works now.
val clickHouseNode = ClickHouseNode.of("http://my-clickhouse-db:8123")
val clickhouseClient = ClickHouseClient.newInstance(clickHouseNode.protocol)
clickHouseClient.read(clickHouseNode)
.format(ClickHouseFormat.JSONEachRow)
.query("select * from my_tabke")
.executeAndWait()
.records()