You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Clickhouse出现Connection refused连接被拒问题求助

问题排查与解决方法

你的配置本身的监听规则、用户网络权限设置没有逻辑错误,Connection refused错误可按以下优先级排查:

1. 先确认容器是否正常启动

  • 执行命令docker ps -a | grep clickhouse查看容器状态,如果状态为Exited,直接查看启动日志定位问题:
    docker logs clickhouse
    
    90%以上的启动失败是因为本地挂载的数据目录权限不足导致:ClickHouse容器内部默认使用uid为101的用户运行,你挂载的本地../data/clickhouse目录没有给对应权限的话会写入失败,执行以下命令修复即可:
    # 方法1:直接给目录读写权限
    sudo chmod -R 777 ../data/clickhouse
    # 方法2:将目录归属改为容器内的clickhouse用户
    sudo chown -R 101:101 ../data/clickhouse
    
    修复后重启容器:docker-compose restart gc-clickhouse

2. 确认配置文件是否正确挂载生效

如果容器状态是Up,先验证配置是否真的加载成功:

docker exec -it clickhouse cat /etc/clickhouse-server/config.xml | grep listen_host

如果输出里没有0.0.0.0或者::,说明本地配置文件挂载失败,检查docker-compose.yml里写的./docker/clickhouse/config.xml相对路径,是否和你执行docker-compose up命令时的工作目录匹配。

额外注意:如果你的宿主机禁用了IPv6,同时配置<listen_host>::</listen_host>会导致监听启动失败,这种情况把::的监听配置注释掉,只保留0.0.0.0的配置重启即可。
另外可以直接在容器内部测试服务是否正常:

docker exec -it clickhouse curl http://127.0.0.1:8123

正常会输出Ok.,说明容器内部服务运行正常,问题出在宿主机到容器的网络层面。

3. 排查宿主机网络问题

  • 检查端口是否被占用:
    ss -tulpn | grep -E '8123|9000'
    
    如果有其他进程占用了这两个端口,修改docker-compose.yml的端口映射即可,比如改成- 18123:8123。
  • 检查宿主机防火墙是否放行了对应端口,以CentOS为例执行:
    firewall-cmd --zone=public --add-port=8123/tcp --permanent
    firewall-cmd --zone=public --add-port=9000/tcp --permanent
    firewall-cmd --reload
    
  • 你配置里指定了自定义的bridge网络,可先把networks配置段删除,用Docker默认的bridge网络测试是否是自定义网络配置错误导致的问题。

4. 确认连接参数是否正确

  • HTTP接口(JDBC/HTTP客户端)默认端口为8123,Native TCP接口(clickhouse-client等)默认端口为9000,不要混用两个端口,连接用户名为default,密码为你配置的password。

内容的提问来源于stack exchange,提问作者Роман

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:39:02