docker compose文件转化为docker 命令

背景:
想用docker run的方式,分布式部署nebula

提问参考模版:

  • nebula 版本:v3.4.0
  • 部署方式:分布式
  • 安装方式: Docker
  • 是否上生产环境: N
  • 硬件信息
    • 磁盘( 推荐使用 SSD)
    • CPU、内存信息
  • 问题的具体描述

个人需求原因,需要用docker run的方式而不是docker compose的方式,单独启动metad、graphd、storaged等镜像,因此需要将docker-compose.yaml转化为docker run命令。
请问贵司有这方面的手册可以参考吗?
比如dgrpah提供的这个教程:https://dgraph.io/docs/deploy/installation/single-host-setup/

这个是 compose 文件 nebula-docker-compose/docker-compose.yaml at master · vesoft-inc/nebula-docker-compose · GitHub

@AIBot 请把下边 docker compose 文件写成 docker run 的命令行,给 KAI1 作为参考,谢谢

version: '3.4'
services:
  metad0:
    image: vesoft/nebula-metad:nightly
    environment:
      USER: root
      TZ:   "${TZ}"
    command:
      - --meta_server_addrs=metad0:9559,metad1:9559,metad2:9559
      - --local_ip=metad0
      - --ws_ip=metad0
      - --port=9559
      - --ws_http_port=19559
      - --data_path=/data/meta
      - --log_dir=/logs
      - --v=0
      - --minloglevel=0
    healthcheck:
      test: ["CMD", "curl", "-sf", "http://metad0:19559/status"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 20s
    ports:
      - 9559
      - 19559
      - 19560
    volumes:
      - ./data/meta0:/data/meta
      - ./logs/meta0:/logs
    networks:
      - nebula-net
    restart: on-failure
    cap_add:
      - SYS_PTRACE

networks:
  nebula-net:
docker run \
-d \
--name metad0 \
-e USER=root \
-e TZ="${TZ}" \
-p 9559:9559 \
-p 19559:19559 \
-p 19560:19560 \
-v ./data/meta0:/data/meta \
-v ./logs/meta0:/logs \
--network nebula-net \
--restart on-failure \
--cap-add SYS_PTRACE \
vesoft/nebula-metad:nightly \
--meta_server_addrs=metad0:9559,metad1:9559,metad2:9559 \
--local_ip=metad0 \
--ws_ip=metad0 \
--port=9559 \
--ws_http_port=19559 \
--data_path=/data/meta \
--log_dir=/logs \
--v=0 \
--minloglevel=0

@wey 感谢回答,使用您转化后的docker-run后,进行了如下操作:

  1. 分别用docker-run,启动了metad0、storaged0、graphd。

块引用
docker run
-d
–name graphd
-e USER=root
-e TZ=“${TZ}”
-p 9669:9669
-p 19669:19669
-p 19670:19670
-v /mnt/sdb/docker-deploy-test/data/graphd:/data/graph
-v /mnt/sdb/docker-deploy-test/logs/graphd:/logs
–restart on-failure
–cap-add SYS_PTRACE
vesoft/nebula-graphd:latest
–meta_server_addrs=服务器1IP:9559,服务器2IP:9559
–local_ip=服务器1IP
–ws_ip=服务器1IP
–port=9669
–ws_http_port=19669
–log_dir=/logs
–v=0
–minloglevel=0

  1. 用studio还是无法连接
  2. 查看日志,显示如下:

    其中,73是物理机IP

请问,该如何解决,多谢多谢!

你容器用的是容器网络,不是 host net,无法 bind 在 host 网卡 ip 的,还是写 graphd 吧

@wey 感谢回复,不知道是否方便,您能多解释下,我对这方面研究不深,感谢!

这里的 my_ip 填写的 ip 或者域名,在服务启动的时候会把 host 绑定在上边,服务进程在绑定之前会检查可以绑定的地址,这个地址你可以等价地用 shell 命令查询,比如 ip a 或者 ifconfig,在容器内部(非 host-net 的容器)网络是隔离在不同的网络命名空间的,这里查到的 ip 地址是不包括你宿主机的 ip 的。

这里你无需修改,写成和容器同名的就可以,所有容器在同一个容器网络内部,彼此用容器名字作为域名是可以解析的。

而 graphd 给的9669:9669 的port设定使得它可以被暴露出来绑定到所有 host ip 上,所以 studio 也是能够访问的。

@wey
非常感谢,我之前可能没表述清楚,由于我们这边特殊原因,没有办法使用docker-compose或者docker-swarm。如果按照您说的这个方法,可能没法实现不同host之间服务的通信。我目前是想用docker run的方式分布式部署nebula到三台物理机

实际上是可以的,你可以把网络模式改成 host net,你去 google 一下。

再就是, compose 和 run 是可以一一对应的,你这个需求用 compose 、swarm 都可以表达。

@wey 好的,感谢,我去Google下,不懂再来请教您

对了,官方就有一个 swarm 的分支哈,可以参考一下呢,就是给多机部署用的

@wey 好的,根据您的建议,docker run已经跑起来了,但是通过studio创建schema失败,显示-1005,Host not enough!我打算用docker run运行console,然后通过add host的方式解决。不知道是否正确。

@AIBot 请把下边 docker compose 文件写成 docker run 的命令行,谢谢

  console:
    image: vesoft/nebula-console:latest
    entrypoint: ""
    command: 
      - sh
      - -c
      - |
        for i in `seq 1 60`;do
          var=`nebula-console -addr graphd -port 9669 -u root -p nebula -e 'ADD HOSTS "storaged0":9779,"storaged1":9779,"storaged2":9779'`;
          if [[ $$? == 0 ]];then
            break;
          fi;
          sleep 1;
          echo "retry to add hosts.";
        done && tail -f /dev/null;

    depends_on:
      - graphd
    networks:
      - nebula-net

@AIBot 请把下边 docker compose 文件写成 docker run 的命令行,谢谢

console:
    image: vesoft/nebula-console:latest
    entrypoint: ""
    command: 
      - sh
      - -c
      - |
        for i in `seq 1 60`;do
          var=`nebula-console -addr graphd -port 9669 -u root -p nebula -e 'ADD HOSTS "storaged0":9779,"storaged1":9779,"storaged2":9779'`;
          if [[ $$? == 0 ]];then
            break;
          fi;
          sleep 1;
          echo "retry to add hosts.";
        done && tail -f /dev/null;

    depends_on:
      - graphd
    networks:
      - nebula-net

在 studio 的 console 里执行 add hosts 就可以

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。