Hyperledger Composer无法连接到dockerized Node.js应用程序

我正在使用Hyperledger Composer v0.16.0和Node.js SDK在POC中工作。 我已经按照这个开发者教程部署了我的Hyperledger Fabric实例,当我通过node server.js命令在本地运行我的Node.js应用程序时,它可以正常工作,我可以检索参与者,资产等。

但是,当我Dockerize我的Node.js应用程序,我运行这个应用程序的容器,我无法达到Hyperledger Fabric实例。 那么,我怎样才能设置证书,以便能够达到我的Hyperledger结构或另一个,因为我的Node.js应用程序?

我的Dockerfile看起来像这样:

 FROM node:8.9.1 WORKDIR /usr/src/app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 CMD [ "npm", "start" ] 

我用这个命令运行我的docker / node.js映像:

 docker run --network composer_default -p 3000:3000 -d myuser/node-web-app 

有Dockerizing你的应用程序有两个缺陷要注意。 1.卡的位置和2.networking服务器的networking地址。

  1. 您的应用使用的商业网卡连接到Fabric。 这些卡片位于默认主文件夹下的隐藏文件夹,例如Linux机器上的/home/thatcher/.composer 。 您需要将这些内容“传递”到容器中,或按照前面的回答所build议的与共享卷共享它们。 因此,首次运行你的容器,尝试在命令-v ~/.composer:/home/<user>/.composer添加它,其中是容器中默认用户的名称。 请注意,Docker主机上的文件夹必须允许对容器内用户的UID进行写入访问。

  2. 如果您已经整理了卡片的共享,则需要考虑卡片中的连接信息。 您正在使用的业务网卡很可能将使用本地主机作为Fabric服务器的地址,将端口从Docker主机端口转发到容器意味着本地主机很容易并且可以正常工作。 但是在你的容器中,localhost会在容器中redirect,所以看不到Fabric。 Docker命令 – --network composer_default上的参数将在Fabric Container的同一个Dockernetworking上设置新容器,因此Container可以看到Fabric服务器的“地址”,例如orderer.example.com但是,在你的容器外面失败。 最好的办法是将你的Docker主机的IP地址编号放在connection.json文件中而不是localhost中,然后你的卡片可以在你的容器内外工作。

所以,凭证将是configuration信息。 将configuration信息传递给基本的docker容器的两种方法是:

  1. 环境variables(-e)
  2. 使用configuration信息装入卷(-v)。

你也可以使用从Dockerfile安装的脚本修改文件等。

docker日志可能会提供有关确切问题或问题集的线索。

 docker logs mynode 

您也可以使用该命令input正在运行的容器并侦听

 docker exec -it mynode bash