我如何在本地networking上的几个docker集装箱之间进行通信

我目前正在使用使用多个docker容器的hyperledger blockchain:

  • DEV-peer0.org1.example.com – 弹子-V5.9
  • peer0.org1.example.com
  • CouchDB的
  • orderer.example.com
  • CLI
  • ca.example.com

在默认configuration下,它们都在同一台机器上运行。

我想要实现的是将它们分成两个不同的计算机:

电脑1:

  • DEV-peer0.org1.example.com – 弹子-V5.9
  • peer0.org1.example.com
  • CouchDB的

电脑2:

  • orderer.example.com
  • CLI
  • ca.example.com

我可以使用主机文件来做这个工作,而不用编辑任何conf文件?

PC1:

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.31.128.146 orderer.example.com 10.31.128.146 cli 10.31.128.146 ca.example.com 

PC2:

 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.31.128.198 dev-peer0.org1.example.com-marbles-v5.9 10.31.128.198 peer0.org1.example.com 10.31.128.198 couchdb 

我已经试过了,我没有工作,但是我想知道我是否应该更多地进入这种方式?

 # # Copyright IBM Corp All Rights Reserved # # SPDX-License-Identifier: Apache-2.0 # version: '2' networks: basic: services: ca.example.com: image: hyperledger/fabric-ca:x86_64-1.0.0 environment: - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - FABRIC_CA_SERVER_CA_NAME=ca.example.com ports: - "7054:7054" command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/org1.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/a22daf356b2aab5792ea53e35f66fccef1d7f1aa2b3a2b92dbfbf96a448ea26a_sk -b admin:adminpw -d' volumes: - ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config container_name: ca.example.com networks: - basic orderer.example.com: container_name: orderer.example.com image: hyperledger/fabric-orderer:x86_64-1.0.0 environment: - ORDERER_GENERAL_LOGLEVEL=debug - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 - ORDERER_GENERAL_GENESISMETHOD=file - ORDERER_GENERAL_GENESISFILE=/etc/hyperledger/configtx/genesis.block - ORDERER_GENERAL_LOCALMSPID=OrdererMSP - ORDERER_GENERAL_LOCALMSPDIR=/etc/hyperledger/msp/orderer/msp working_dir: /opt/gopath/src/github.com/hyperledger/fabric/orderer command: orderer ports: - 7050:7050 volumes: - ./config/:/etc/hyperledger/configtx - ./crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/:/etc/hyperledger/msp/orderer - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/:/etc/hyperledger/msp/peerOrg1 networks: - basic peer0.org1.example.com: container_name: peer0.org1.example.com image: hyperledger/fabric-peer:x86_64-1.0.0 environment: - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - CORE_PEER_ID=peer0.org1.example.com - CORE_LOGGING_PEER=debug - CORE_CHAINCODE_LOGGING_LEVEL=DEBUG - CORE_PEER_LOCALMSPID=Org1MSP - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/peer/ - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 # # the following setting starts chaincode containers on the same # # bridge network as the peers # # https://docs.docker.com/compose/networking/ - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_basic - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb:5984 working_dir: /opt/gopath/src/github.com/hyperledger/fabric command: peer node start # command: peer node start --peer-chaincodedev=true ports: - 7051:7051 - 7053:7053 volumes: - /var/run/:/host/var/run/ - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/msp/peer - ./crypto-config/peerOrganizations/org1.example.com/users:/etc/hyperledger/msp/users - ./config:/etc/hyperledger/configtx depends_on: - orderer.example.com networks: - basic couchdb: container_name: couchdb image: hyperledger/fabric-couchdb:x86_64-1.0.0 ports: - 5984:5984 environment: DB_URL: http://localhost:5984/member_db networks: - basic cli: container_name: cli image: hyperledger/fabric-tools:x86_64-1.0.0 tty: true environment: - GOPATH=/opt/gopath - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - CORE_LOGGING_LEVEL=DEBUG - CORE_PEER_ID=cli - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 - CORE_PEER_LOCALMSPID=Org1MSP - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp - CORE_CHAINCODE_KEEPALIVE=10 working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer command: /bin/bash volumes: - /var/run/:/host/var/run/ - ./../chaincode/:/opt/gopath/src/github.com/ - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ networks: - basic #depends_on: # - orderer.example.com # - peer0.org1.example.com # - couchdb 

如果您想要closures主机路由,您需要使用/将extra_hosts添加到每个组合服务定义中。

我build议为覆盖networking启用Swarm模式。 理想情况下,你甚至可以在Swarm模式下运行容器,但是这不是只有覆盖networking的必要条件。

一个主机,运行以下来创build一个pipe理器:

 docker swarm init 

然后在第二台主机上运行输出docker swarm join命令。


选项A:仅用于覆盖networking,您需要创build一个可附着的networking以在群集模式之外使用它:

 docker network create -d overlay --attachable basic 

然后在您的撰写文件中,将networking定义调整为外部:

 version: '2' networks: basic: external: name: basic 

借此,您的容器将能够通过覆盖networking直接进行通信。


选项B:要使用群集模式运行容器,可以跳过networking创build并将networking设置为外部。 只需将您的版本更新到compose.yml文件中的version: '3' ,我也会删除“container_name”行。 然后运行:

 docker stack deploy -c compose.yml hyperledger 

创build一个名为hyperledger的堆栈。