MacOS上部署appchain关于端口映射的一点感悟

正常安装

按照NervOS文档进行appchain的搭建,以及测试是没有问题的。
文档参照这里

测试是在docker内执行 curl ,也可以返回测试结果。(相当于在docker内发了一个http post请求)

测试命令:
./env.sh curl -X POST --data ‘{“jsonrpc”:“2.0”,“method”:“peerCount”,“params”:,“id”:74}’ 127.0.0.1:1337

./env.sh 即为进入docker

更多测试

如果在MacOS本地发送 curl 请求失败,无法返回结果。

测试命令如下:
curl -X POST --data ‘{“jsonrpc”:“2.0”,“method”:“peerCount”,“params”:,“id”:74}’ 127.0.0.1:1337

经过NervOS开发人员指导后,修改 target/install/env.sh

启动 docker命令增加如下参数:

    docker run -d \
           -p 1337:1337 \
           --network bridge \
           --volume ${RELEASE_DIR}:${WORKDIR} \

重新创建docker,并设置节点并启动。

如何重新创建NervOS节点并启动

  1. 删掉当前的docker
  2. 删掉当前节点目录
  3. 创建节点
  4. 设置节点
  5. 启动节点
   $  docker ps
   $  docker rm -f 38955e1182e2  # docker id
   $  rm -rf test-chain/
   $  ./env.sh ./scripts/create_cita_config.py create --nodes "127.0.0.1:4000,127.0.0.1:4001,127.0.0.1:4002,127.0.0.1:4003"
   $  docker ps
   $  ./env.sh ./bin/cita setup test-chain/0
   $  ./env.sh ./bin/cita setup test-chain/1
   $  ./env.sh ./bin/cita setup test-chain/2
   $  ./env.sh ./bin/cita setup test-chain/3
   $  ./daemon.sh ./bin/cita start test-chain/0
   $  ./daemon.sh ./bin/cita start test-chain/1
   $  ./daemon.sh ./bin/cita start test-chain/2
   $  ./daemon.sh ./bin/cita start test-chain/3

遗留问题

在Mac本地使用Nervos.js sdk去访问docker,仍然有问题。

前提: appchain正常运行,MacOS本地已经映射 1337 端口

如下:

const NervOS = require(“@nervos/chain”).default
const nerv2 = NervOS(“http://localhost:1337”)
undefined
nerv2.appchain.getBlockNumber()
Promise {
,

所以我理解的是,验证中用的命令(./env.sh curl -X POST --data ‘{“jsonrpc”:“2.0”,“method”:“peerCount”,“params”:,“id”:74}’ 127.0.0.1:1337
)是发到docker内部执行,即docker自己发给自己的http post请求。

而nervos.js sdk可能需要不同的服务和端口,而这些端口或服务有可能docker通讯存在问题。

所以需要映射更多的端口。

也麻烦帮忙验证一下,多谢 :)

4 Likes

mac上的docker其实是跑了一个虚拟机,虚拟机里了装了一个安装了docker的linux。
所以要在mac本地访问的话,需要两层端口映射,一层是docker到linux,一层是虚拟机到mac。
可以查看一下网络上相关的文章。

端口方面,appchain对应用只暴露了jsonrpc端口,没有其他的端口了。

1 Like