fabric里peer启动chaincode容器如何回访peer

CodingCode · · 848 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

fabric里peer启动chaincode容器如何回访peer

  1. peer如何启动chaincode

chaincode是在一个独立的container里面启动的;整个过程由peer来完成;分如下几步:

# core/container/dockercontroller/dockercontroller.go
# func (vm *DockerVM) Start(...)
  vm.stopInternal(client, containerName, 0, false, false)
  err = vm.createContainer(client, imageName, containerName, args, env, attachStdout)
  if err == docker.ErrNoSuchImage {
      reader, err := builder.Build()
      err = vm.deployImage(client, ccid, reader)
      err = vm.createContainer(client, imageName, containerName, args, env, attachStdout)
  }

  err = client.StartContainer(containerName, nil)
  1. 先发一个stop命令,不管原先是否存在,停止原来的container。
  2. 试图创建container,如果失败原因是image不存在(说明是第一个创建)
    2.1 编译chaincode代码
    2.2 生成chaincode的image
    2.3 重新创建container
  3. 启动container
  1. chaincode container的网络

peer创建一个chaincode container之后这个container所属的网络是配置项(NetworkMode)决定的。
例如在docker-compose.yaml里面如下定义:

- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_byfn

如果没有定义,那么缺省是"host"。 参见代码:

# core/container/dockercontroller/dockercontroller.go
# func getDockerHostConfig()
    networkMode := viper.GetString(dockerKey("NetworkMode"))
    if networkMode == "" {
        networkMode = "host"
    }

所以这里我们可以定义是否让chaincode和peer的container在同一个网络里面。假设已知peer的网络是net_byfn,那么只要把peer的环境变量CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE设成net_byfn,peer创建出来的chaincode的container的网络也是net_byfn了,设置成其他值(或者不设置),则表示不在同一个网络里面。

  1. chaincode如何回访访问peer

以golang的chaincode为例,container起来之后执行的命令行是:

chaincode -peer.address=saturn:7052

这个命令是由peer设置提供的,参数peer.address就是告诉chaincode启动之后连接的peer的地址;这个地址是由peer产生出来的,规则是按如下顺序:

  1. CORE_PEER_CHAINCODEADDRESS
  2. CORE_PEER_CHAINCODELISTENADDRESS
  3. peerAddr

参见:

# peer/node/start.go
# func computeChaincodeEndpoint(peerHostname string) (ccEndpoint string, err error)
  1. 添加主机域名

如果peer的地址(域名)在chaincode的container里面不可访问,那么需要通过环境变量传给chaincode container:

# CORE_VM_DOCKER_HOSTCONFIG_EXTRAHOSTS=<hostdomainname>:<ipaddress>
# For example
CORE_VM_DOCKER_HOSTCONFIG_EXTRAHOSTS=saturn:10.172.7.10

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:CodingCode

查看原文:fabric里peer启动chaincode容器如何回访peer

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

848 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传