[PR #1004] [MERGED] fix(signoz): fix ClickHouse hostname resolution and IPv6 binding #16312

Closed
opened 2026-07-14 23:18:54 -05:00 by GiteaMirror · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/Dokploy/templates/pull/1004
Author: @Siumauricio
Created: 7/14/2026
Status: Merged
Merged: 7/14/2026
Merged by: @Siumauricio

Base: canaryHead: fix/signoz-clickhouse


📝 Commits (1)

  • 1e48681 fix(signoz): fix ClickHouse hostname resolution and IPv6 binding

📊 Changes

2 files changed (+21 additions, -8 deletions)

View changed files

📝 blueprints/signoz/docker-compose.yml (+2 -6)
📝 blueprints/signoz/template.toml (+19 -2)

📄 Description

Problem

Deploying the SigNoz template on Dokploy fails with ClickHouse errors (#534):

  • DNS resolution: Cannot use ZooKeeper host zookeeper-1:2181 due to DNS error: Temporary DNS error while resolving: zookeeper-1, and the server cannot resolve the cluster host clickhouse as itself.
  • IPv6 binding: the clickhouse/clickhouse-server image ships config.d/docker_related_config.xml with <listen_host>::</listen_host> first, which fails to bind on hosts without IPv6 support (common on VPSes with IPv6 disabled).

While fixing this, two more template bugs surfaced:

  • template.toml created files/signoz/prometheus.xml but the compose mounts ../files/signoz/prometheus.yml, so Docker silently created and mounted a directory as the signoz prometheus config.
  • Both [[config.domains]] entries shared the same host and path /, creating two conflicting Traefik routers (signoz UI vs otel-collector) where one randomly won.

Fix

  • Mount a template-owned docker_related_config.xml over the image default: listen on 0.0.0.0 (IPv4) only, keep listen_try, and set disable_internal_dns_cache=1 so ClickHouse does not cache transient startup DNS failures for zookeeper-1/clickhouse.
  • Set hostname: clickhouse (replacing container_name: signoz-clickhouse) so the server identifies itself as the cluster host declared in cluster.xml, and a fixed container name cannot conflict across deployments.
  • Remove the explicit fixed-name signoz-net network (the repo validator rejects explicit networks; Dokploy wires networks automatically, and a fixed shared network name breaks DNS across deployments).
  • Fix the prometheus mount to /signoz/prometheus.yml.
  • Give the otel-collector domain its own generated host (otel_domain), matching the convention used by other multi-domain templates.

Verification (deployed on a Dokploy instance)

  • Deploy finished done in 228s; all one-shot containers (init-clickhouse, schema-migrator-sync, schema-migrator-async) exited 0 — the sync migrator runs distributed DDL ON CLUSTER through ZooKeeper, which is exactly the path that failed in #534.
  • ClickHouse container: running / healthy, RestartCount: 0; log tail contains 0 DNS-error lines and 0 IPv6/bind-error lines.
  • SigNoz UI domain: HTTP 200 — "Open source Observability platform | SigNoz".
  • OTLP domain (otel-collector:4318): POST /v1/traces and POST /v1/logs return HTTP 200 {"partialSuccess":{}}; GET /v1/traces returns 405 method not allowed, supported: [POST] (the receiver answering). Note: GET / on an OTLP HTTP receiver always returns its own 404 page not found — that is expected receiver behavior, not a routing failure.
  • node build-scripts/generate-meta.js --check: 476 templates validated; validate-template and validate-docker-compose pass for signoz.

Closes #534

🤖 Generated with Claude Code


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/Dokploy/templates/pull/1004 **Author:** [@Siumauricio](https://github.com/Siumauricio) **Created:** 7/14/2026 **Status:** ✅ Merged **Merged:** 7/14/2026 **Merged by:** [@Siumauricio](https://github.com/Siumauricio) **Base:** `canary` ← **Head:** `fix/signoz-clickhouse` --- ### 📝 Commits (1) - [`1e48681`](https://github.com/Dokploy/templates/commit/1e486813b4d99448b7f033632284366579ec9ef4) fix(signoz): fix ClickHouse hostname resolution and IPv6 binding ### 📊 Changes **2 files changed** (+21 additions, -8 deletions) <details> <summary>View changed files</summary> 📝 `blueprints/signoz/docker-compose.yml` (+2 -6) 📝 `blueprints/signoz/template.toml` (+19 -2) </details> ### 📄 Description ## Problem Deploying the SigNoz template on Dokploy fails with ClickHouse errors (#534): - **DNS resolution**: `Cannot use ZooKeeper host zookeeper-1:2181 due to DNS error: Temporary DNS error while resolving: zookeeper-1`, and the server cannot resolve the cluster host `clickhouse` as itself. - **IPv6 binding**: the `clickhouse/clickhouse-server` image ships `config.d/docker_related_config.xml` with `<listen_host>::</listen_host>` first, which fails to bind on hosts without IPv6 support (common on VPSes with IPv6 disabled). While fixing this, two more template bugs surfaced: - `template.toml` created `files/signoz/prometheus.xml` but the compose mounts `../files/signoz/prometheus.yml`, so Docker silently created and mounted a **directory** as the signoz prometheus config. - Both `[[config.domains]]` entries shared the same host and path `/`, creating two conflicting Traefik routers (signoz UI vs otel-collector) where one randomly won. ## Fix - Mount a template-owned `docker_related_config.xml` over the image default: listen on `0.0.0.0` (IPv4) only, keep `listen_try`, and set `disable_internal_dns_cache=1` so ClickHouse does not cache transient startup DNS failures for `zookeeper-1`/`clickhouse`. - Set `hostname: clickhouse` (replacing `container_name: signoz-clickhouse`) so the server identifies itself as the cluster host declared in `cluster.xml`, and a fixed container name cannot conflict across deployments. - Remove the explicit fixed-name `signoz-net` network (the repo validator rejects explicit networks; Dokploy wires networks automatically, and a fixed shared network name breaks DNS across deployments). - Fix the prometheus mount to `/signoz/prometheus.yml`. - Give the otel-collector domain its own generated host (`otel_domain`), matching the convention used by other multi-domain templates. ## Verification (deployed on a Dokploy instance) - Deploy finished `done` in 228s; all one-shot containers (`init-clickhouse`, `schema-migrator-sync`, `schema-migrator-async`) exited `0` — the sync migrator runs distributed DDL `ON CLUSTER` through ZooKeeper, which is exactly the path that failed in #534. - ClickHouse container: `running` / `healthy`, `RestartCount: 0`; log tail contains **0** DNS-error lines and **0** IPv6/bind-error lines. - SigNoz UI domain: `HTTP 200` — "Open source Observability platform | SigNoz". - OTLP domain (otel-collector:4318): `POST /v1/traces` and `POST /v1/logs` return `HTTP 200 {"partialSuccess":{}}`; `GET /v1/traces` returns `405 method not allowed, supported: [POST]` (the receiver answering). Note: `GET /` on an OTLP HTTP receiver always returns its own `404 page not found` — that is expected receiver behavior, not a routing failure. - `node build-scripts/generate-meta.js --check`: 476 templates validated; `validate-template` and `validate-docker-compose` pass for signoz. Closes #534 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
GiteaMirror added the pull-request label 2026-07-14 23:18:54 -05:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/templates#16312