Docker镜像无法互相通信求助:CubeStore主从节点配置
CubeStore主从节点Docker通信问题解决方法
问题背景
尝试配置两个互相依赖的CubeStore Docker镜像:
- 主节点(cubestore_router)Dockerfile:
FROM cubejs/cubestore:v0.31.58-arm64v8 ENV CUBESTORE_WORKERS=cubestore_worker_1:9001 ENV CUBESTORE_META_PORT=9999 ENV CUBESTORE_SERVER_NAME=cubestore_router:9999
- 工作节点(cubestore_worker_1)Dockerfile:
FROM cubejs/cubestore:v0.31.58-arm64v8 ENV CUBESTORE_SERVER_NAME=cubestore_worker_1:9001 ENV CUBESTORE_WORKER_PORT=9001 ENV CUBESTORE_META_ADDR=cubestore_router:9999 ENV CUBESTORE_WORKERS=cubestore_worker_1:9001
通过docker build -f path/Dockerfile .构建镜像后,使用镜像ID运行容器,已创建自定义网络my-network并将容器加入,但工作节点与主节点仍无法通信。
解决步骤
1. 运行容器时指定容器名称
自定义Docker网络中,容器之间通过容器名称进行DNS解析,之前的命令未指定名称,导致无法通过cubestore_router、cubestore_worker_1互相访问。调整启动命令:
# 启动主节点,指定名称为cubestore_router docker run -d --name cubestore_router --network my-network [主节点镜像ID] # 启动工作节点,指定名称为cubestore_worker_1 docker run -d --name cubestore_worker_1 --network my-network [工作节点镜像ID]
2. 确认端口暴露与可达性
CubeStore镜像默认已暴露所需端口,可在启动时显式映射端口以便外部验证:
# 主节点:映射元数据端口9999到主机 docker run -d --name cubestore_router --network my-network -p 9999:9999 [主节点镜像ID] # 工作节点:映射工作端口9001到主机 docker run -d --name cubestore_worker_1 --network my-network -p 9001:9001 [工作节点镜像ID]
可在主机上通过以下命令验证端口可达性:
# 检查主节点健康状态 curl http://localhost:9999/health # 检查工作节点健康状态 curl http://localhost:9001/health
3. 调整启动顺序
工作节点依赖主节点的元数据服务,需确保主节点完全启动后再启动工作节点。可通过日志确认主节点状态:
# 查看主节点日志,确认服务启动完成 docker logs cubestore_router
日志中出现Meta service started on port 9999类信息后,再启动工作节点。
4. 验证容器间通信
进入工作节点容器,直接测试与主节点的连通性:
# 进入工作节点容器 docker exec -it cubestore_worker_1 sh # ping主节点名称验证DNS解析 ping cubestore_router # 访问主节点健康检查接口验证服务连通 curl http://cubestore_router:9999/health
若能ping通且健康检查返回OK,则通信正常。
可选:用Docker Compose简化配置
频繁调试时,可使用Docker Compose一键部署,避免手动执行命令:
创建docker-compose.yml文件:
version: '3.8' services: cubestore_router: build: context: ./path/to/router dockerfile: Dockerfile networks: - my-network ports: - "9999:9999" container_name: cubestore_router cubestore_worker_1: build: context: ./path/to/worker dockerfile: Dockerfile networks: - my-network ports: - "9001:9001" container_name: cubestore_worker_1 depends_on: - cubestore_router networks: my-network: driver: bridge
启动服务:
docker-compose up -d
内容的提问来源于stack exchange,提问作者boomchickawawa
相关产品推荐
相关产品推荐

