Docker部署Clickhouse出现Connection refused连接被拒问题求助
问题排查与解决方法
你的配置本身的监听规则、用户网络权限设置没有逻辑错误,Connection refused错误可按以下优先级排查:
1. 先确认容器是否正常启动
- 执行命令
docker ps -a | grep clickhouse查看容器状态,如果状态为Exited,直接查看启动日志定位问题:
90%以上的启动失败是因为本地挂载的数据目录权限不足导致:ClickHouse容器内部默认使用uid为101的用户运行,你挂载的本地docker logs clickhouse../data/clickhouse目录没有给对应权限的话会写入失败,执行以下命令修复即可:
修复后重启容器:# 方法1:直接给目录读写权限 sudo chmod -R 777 ../data/clickhouse # 方法2:将目录归属改为容器内的clickhouse用户 sudo chown -R 101:101 ../data/clickhousedocker-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,提问作者Роман
相关产品推荐
相关产品推荐

