Hyperledger Composer无法与dockerized Node.js app

时间:2017-12-14 01:19:30

标签: node.js docker hyperledger hyperledger-composer

我正在使用Hyperledger Composer v0.16.0和Node.js SDK在POC中工作。我在此developer tutorial之后部署了我的Hyperledger Fabric实例,当我通过node server.js命令在本地运行我的Node.js应用程序时,它可以正常工作,我可以检索参与者,资产等。

但是,当我Dockerize我的Node.js应用程序并运行此应用程序的容器时,我无法访问Hyperledger Fabric实例。那么,我如何设置凭据以便能够从我的Node.js应用程序到达我的Hyperledger Fabric或另一个?

我的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

2 个答案:

答案 0 :(得分:3)

使用Docker化应用程序需要注意两个陷阱。 1.卡的位置和2. Fabric服务器的网络地址。

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

  2. 当您完成卡片的共享时,您需要考虑卡片中的连接信息。您正在使用的业务网卡很可能使用localhost作为Fabric服务器的地址,从Docker主机到容器的端口转发意味着localhost很容易且有效。但是在您的容器中,localhost将在容器内重定向,因此不会看到Fabric。 Docker命令--network composer_default上的参数将在与Fabric Containers相同的Docker网络上设置您的新容器,因此您的Container可以看到Fabric服务器的“地址”,例如orderer.example.com但是你的卡会在你的容器外面失败。最好的方法是将Docker主机的IP地址编号放入connection.json文件而不是localhost,然后你的卡就能在容器内外工作。

答案 1 :(得分:0)

因此,凭据将是配置信息。将配置信息传递到基本docker容器的两种方法是:

  1. 环境变量(-e)
  2. 使用配置信息安装卷(-v)。
  3. 您还可以使用从Dockerfile安装的脚本来修改文件等。

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

    docker logs mynode
    

    您还可以使用命令

    输入正在运行的容器并进行窥探
    docker exec -it mynode bash