前言
仅记录学习过程,有问题欢迎讨论
docker desktop是付费软件,公司不让用,所以在网上搜寻了一圈替代方法。找到以下方式可以成功在本地搭建nabula3个服务。记录一下。
步骤1
- 首先我们要下载开源软件rencher desktop,其实他和docker desktop原理是一样的,也是内置了一个docker。这样我们不需要下载linux环境了,也不需要占据太多内存。
- 下载地址:https://mirrors.aliyun.com/github/releases/rancher-sandbox/rancher-desktop/v1.19.0/?spm=a2c6h.25603864.0.0.13d322c30CzMbH
- 主要是使用内置的docker容器,然后去掉kubernate。

- 安装成功了打开进入windows的power shell,输入docker -v 可以看到版本信息就ok!

步骤2
- 然后去网上下载nebula-docker-compose-master和nebula-graph的安装包.
- 印象中nebula-docker-compose是从github直接下载的,我放了一个资源可以自己下载下载和解压放在D盘下自己命名的nebulaGraph下

- 之后就是解压然后修改docker-componse的配置。
- 这里配置了下载nebula3个服务的路径,但是国内得搭建梯子才可以下载,我下面贴出我的配置,也是调整了好久才搭建成功。(见下方)

步骤3
-
打开power shell 管理员,执行以下命令拉取nebula的3个服务镜像+console镜像+studio镜像(华为云的可以不用魔法下载)
自己手动拉取image:
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-metad:v3.8.0
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-storaged:v3.8.0拉取 console(amd64 架构,同镜像源,用于连接集群)
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-console:v3.8.0
拉取 NebulaGraph Studio 官方 amd64 镜像(v3.8.0,与你的 Nebula 版本匹配,网页控制台)
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-graph-studio:v3.10.0
-
等到拉取完毕后,进入到上面的目录:D:\NebulaGraph\nebula-docker-compose。
-
依次执行以下命令(第一次可以从第3步开始):
sh
# 1. 停止所有服务
docker compose down
# 2. 删除旧数据(必须!因为之前的错误注册信息已污染元数据)
docker volume rm nebula-docker-compose_metad-data nebula-docker-compose_metad-logs nebula-docker-compose_storaged-data nebula-docker-compose_storaged-logs nebula-docker-compose_graphd-data nebula-docker-compose_graphd-logs
# 3. 启动所有服务
docker compose up -d
# 4. 等待 60 秒(让 healthcheck 确保 metad 完全就绪)
Start-Sleep -Seconds 60
# 5. 验证端口绑定(现在必须有输出)
docker exec nebula-metad netstat -tln | findstr "9559"
# 或
docker exec nebula-metad ss -tln | findstr "9559"
# 6. 添加 storage 节点
$IP = docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nebula-storaged
docker compose exec -it console /usr/local/bin/nebula-console -addr graphd -port 9669 -u root -p nebula -e "ADD HOSTS ${IP}:9779;"
# 7. 等待 10 秒后验证
Start-Sleep -Seconds 10
docker compose exec -it console /usr/local/bin/nebula-console -addr graphd -port 9669 -u root -p nebula -e "SHOW HOSTS;"
- 需要注意的是第一次启动,需要手动注册storaged服务注册到metad服务中去,参考5-7步。(这一步卡了很久,目前我采用的是固定ip方式)
步骤4
-
启动成功进入网址:http://localhost:7001
主机(Host):localhost
端口(Port):9669
用户名(Username):root
密码(Password):nebula
-
如果可以进入代表nebula服务没有问题,可以开心玩耍啦。如果无法进入报错,就需要一个个服务看docker日志去排查了,顺序为meta的到storage到graph服务。
-
如果localhost进不去,可能得看下自己本机的IP地址 用ifconfig命令看wsl的firewall ip地址(下图)。
-

-
提供我这个3.8版本的目录查看日志命令:
sh
# 看日志 docker compose logs storaged
docker exec nebula-storaged tail -n 30 /usr/local/nebula/logs/nebula-storaged.ERROR
docker exec nebula-storaged tail -n 30 /usr/local/nebula/logs/nebula-storaged.INFO | Select-String "Using"
docker exec nebula-metad tail -n 20 /usr/local/nebula/logs/nebula-metad.INFO
docker exec nebula-graphd tail -n 20 /usr/local/nebula/logs/nebula-graphd.INFO
docker-compose.yml
yaml
volumes:
metad-data: # metad 数据卷
metad-logs: # metad 日志卷
storaged-data: # storaged 数据卷
storaged-logs: # storaged 日志卷
graphd-data: # graphd 数据卷
graphd-logs: # graphd 日志卷
services:
metad:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-metad:v3.8.0
container_name: nebula-metad
restart: always
volumes:
- metad-data:/usr/local/nebula/data
- metad-logs:/usr/local/nebula/logs
command:
- /usr/local/nebula/bin/nebula-metad
- --meta_server_addrs=172.18.0.10:9559
- --local_ip=172.18.0.10 # 关键:改为容器名,允许外部连接
- --ws_ip=0.0.0.0
- --port=9559
- --ws_http_port=19559
- --log_dir=/usr/local/nebula/logs
- --v=1
# 关键:添加 healthcheck,确保完全就绪后再接受依赖
healthcheck:
test: ["CMD", "bash", "-c", "timeout 2 bash -c 'cat < /dev/null > /dev/tcp/localhost/9559'"]
interval: 10s
timeout: 5s
retries: 6
start_period: 30s # 给 metad 30 秒初始化时间
networks:
nebula-net:
ipv4_address: 172.18.0.10
storaged:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-storaged:v3.8.0
container_name: nebula-storaged
restart: always
volumes:
- storaged-data:/usr/local/nebula/data
- storaged-logs:/usr/local/nebula/logs
command:
- /usr/local/nebula/bin/nebula-storaged
- --meta_server_addrs=172.18.0.10:9559
- --local_ip=172.18.0.11
- --ws_ip=0.0.0.0
- --port=9779
- --ws_http_port=19779
- --log_dir=/usr/local/nebula/logs
- --v=1
depends_on:
metad:
condition: service_healthy
networks:
nebula-net:
ipv4_address: 172.18.0.11
graphd:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-graphd:v3.8.0
container_name: nebula-graphd
restart: on-failure:3 # 修正:失败后重启3次,避免无限循环
ports:
- "9669:9669"
volumes:
- graphd-data:/usr/local/nebula/data
- graphd-logs:/usr/local/nebula/logs
command:
- /usr/local/nebula/bin/nebula-graphd
- --meta_server_addrs=metad:9559 # 指向metad服务
- --local_ip=172.18.0.12 # 节点通信地址为服务名
- --port=9669 # graph客户端查询端口
- --log_dir=/usr/local/nebula/logs
- --stderrthreshold=0
- --v=1
- --minloglevel=0
depends_on:
metad:
condition: service_healthy # 新增
storaged:
condition: service_started # 可以等待storaged启动
networks:
nebula-net:
ipv4_address: 172.18.0.12
studio:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-graph-studio:v3.10.0
container_name: nebula-studio
restart: always
ports:
- "7001:7001"
environment:
- NEBULA_SERVER_ADDRESS=172.18.0.12:9669
depends_on:
- graphd
networks:
- nebula-net
console:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/vesoft/nebula-console:v3.8.0
container_name: nebula-console
entrypoint: sleep
command: infinity # 保持容器一直运行
depends_on:
metad:
condition: service_healthy # 仅在 metad 健康检查通过后启动
networks:
- nebula-net
networks:
nebula-net:
driver: bridge
ipam:
config:
- subnet: 172.18.0.0/24
gateway: 172.18.0.1