Hyperledger Fabric peer 显示错误:“listen tcp 127.0.0.1:9443: bind: address already in use”但仅在使用 docker-py 时

如何解决Hyperledger Fabric peer 显示错误:“listen tcp 127.0.0.1:9443: bind: address already in use”但仅在使用 docker-py 时

我正在基于此创建一个超级账本网络:https://wahabjawed.medium.com/hyperledger-fabric-on-multiple-hosts-a33b08ef24f .

当我在终端中使用 dockers 时,它总是运行良好,但现在我正在尝试使用 docker-py 并且遇到了我在启动第一个对等点时无法解决的问题: Image of the output

Error: Failed to initialize operations subystems: listen tcp 127.0.0.1:9443: bind: address already in use

我的场景很简单,我有一个 CA、一个 Orderer、一个 couchDB 和 peer。 CA 和 Orderer 正在从终端运行:

docker run --rm -it \
  --network="my-net" \
  --name ca.org1.com \
  -p 7054:7054 \
  -e FABRIC_CA_HOME=/etc/perledger/fabric-ca-server \
  -e FABRIC_CA_SERVER_CA_NAME=ca.example.com \
  -e FABRIC_CA_SERVER_CA_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem \
  -e FABRIC_CA_SERVER_CA_KEYFILE=/etc/hyperledger/fabric-ca-server-config/9509af3cc8338cd8728985b16b2acd854fc92ac5_sk \
  -v $(pwd)/crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config \
  -e CORE_VM_DOCKER_HOSTCONfig_NETWORKMODE=hyp-net \
  hyperledger/fabric-ca \
  sh -c 'fabric-ca-server start -b admin:adminpw -d'

docker run --rm -it \
  --network="my-net" \
  --name orderer.example.com \
  -p 7050:7050 -e ORDERER_GENERAL_LOGLEVEL=debug \
  -e ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 \
  -e ORDERER_GENERAL_LISTENPORT=7050 \
  -e ORDERER_GENERAL_GEnesISMETHOD=file \
  -e ORDERER_GENERAL_GEnesISFILE=/var/hyperledger/orderer/orderer.genesis.block \
  -e ORDERER_GENERAL_LOCALMSPID=OrdererMSP \
  -e ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp \
  -e ORDERER_GENERAL_TLS_ENABLED=false \
  -e CORE_VM_DOCKER_HOSTCONfig_NETWORKMODE=my-net \
  -v $(pwd)/channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block \
  -v $(pwd)/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp \
  -w /opt/gopath/src/github.com/hyperledger/fabric \
  hyperledger/fabric-orderer \
  orderer

现在,couchdb 和 peer 正在使用 docker-py 运行:

def start_couchdb():
  couchdb = docker.from_env()
  container_couchdb = couchdb.containers.run(
    image="hyperledger/fabric-couchdb",name="couchdb" + couchdb_num,ports={'5984/tcp':'5984'},network=docker_net,environment=[
      "COUCHDB_USER=","COUCHDB_PASSWORD=","CORE_VM_DOCKER_HOSTCONfig_NETWORKMODE=my-net"
    ],auto_remove=True,tty=True,stdin_open=True,detach=True
  )

def start_peer():
  bindVolume = ...
  cliente = docker.from_env()
  container_peer = cliente.containers.run(
    image="hyperledger/fabric-peer",name="peer" + peer_num,ports={'7051/tcp':'8051','7053/tcp':'8053'},links={'orderer.example.com':'orderer.example.com'},volumes=bindVolume,environment=[
      "CORE_LEDGER_STATE_STATEDATABASE=CouchDB","CORE_LEDGER_STATE_COUCHDBCONfig_COUCHDBADDRESS=couchdb" + couchdb_num + ":5984","CORE_LEDGER_STATE_COUCHDBCONfig_USERNAME=","CORE_LEDGER_STATE_COUCHDBCONfig_PASSWORD=","CORE_PEER_ADDRESSAUTODETECT=true","CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock","CORE_LOGGING_LEVEL=DEBUG","CORE_PEER_NETWORKID=peer" + peer_num + ".org" + org_num + ".example.com","CORE_NEXT=true","CORE_PEER_ENDORSER_ENABLED=true","CORE_PEER_ID=peer" + peer_num + ".org" + org_num + ".example.com","CORE_PEER_PROFILE_ENABLED=true","CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer.example.com:7050","CORE_PEER_GOSSIP_IGnorESecurity=true","CORE_VM_DOCKER_HOSTCONfig_NETWORKMODE=" + docker_net + "","CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer" + peer_num + ".org" + org_num + ".example.com:7051","CORE_PEER_TLS_ENABLED=false","CORE_PEER_GOSSIP_USEleaderELECTION=false","CORE_PEER_GOSSIP_ORGleader=true","CORE_PEER_LOCALMSPID=Org" + org_num + "MSP"
    ],working_dir="/opt/gopath/src/github.com/hyperledger/fabric/peer",detach=True
  )
  result = container_peer.exec_run(cmd="peer node start")

如您所见,我没有在对等 docker 中使用端口 9443。我试过 ss -a -a | grep 9443 但它没有输出。此外,由于我有 2 台 PC 连接到 swarm 网络,因此我在第二台 PC 上执行了 python 脚本,但没有任何改变。

我已经读过订购者使用了端口 9443,但我没有使用任何 docker.yaml,所以我无法更改那里的对等端口。当我从终端使用 docker 时,peer 完美启动,发生了什么?

docker run --rm -it --link orderer.example.com:orderer.example.com --network="my-net" --name peer0.org1.example.com -p 8051:7051 -p 8053:7053 -e CORE_LEDGER_STATE_STATEDATABASE=CouchDB -e CORE_LEDGER_STATE_COUCHDBCONfig_COUCHDBADDRESS=couchdb0:5984 -e CORE_LEDGER_STATE_COUCHDBCONfig_USERNAME= -e CORE_LEDGER_STATE_COUCHDBCONfig_PASSWORD= -e CORE_PEER_ADDRESSAUTODETECT=true -e CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock -e CORE_LOGGING_LEVEL=DEBUG -e CORE_PEER_NETWORKID=peer0.org1.example.com -e CORE_NEXT=true -e CORE_PEER_ENDORSER_ENABLED=true -e CORE_PEER_ID=peer0.org1.example.com -e CORE_PEER_PROFILE_ENABLED=true -e CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer.example.com:7050 -e CORE_PEER_GOSSIP_IGnorESecurity=true -e CORE_VM_DOCKER_HOSTCONfig_NETWORKMODE=my-net -e CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051 -e CORE_PEER_TLS_ENABLED=false -e CORE_PEER_GOSSIP_USEleaderELECTION=false -e CORE_PEER_GOSSIP_ORGleader=true -e CORE_PEER_LOCALMSPID=Org1MSP -v /var/run/:/host/var/run/ -v $(pwd)/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp -w /opt/gopath/src/github.com/hyperledger/fabric/peer hyperledger/fabric-peer peer node start

-p 与 docker-py 中的 ports={} 有不同的效果吗?也许 Docker-py 发布所有端口?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?