上篇说到:fabric官方提供了docker镜像starter,运行一个nodejs写的hfc(Hyperledger Fabric Client)示例程序,但是在docker下缺少写代码和调试代码的手段,本篇的目的在于解决这个问题。
我们要在docker下的nodejs和主机下的visual studio code之间暗通款曲,使得vsc能够方便地调戏试docker下的hfc程序。
下面简单介绍下登场的角色:
- visual studio code
老牌IDE厂商微软力捧的新人(简称vsc),开源ide。用来做nodejs开发,响应速度甩eclipse几条街。
vsc内置了通过端口对nodejs的Remote调试,可以在launch.json
文件配置。参考这篇文章 - nodejs。(注意:fabric提供的hfc环境并不支持es6,我们仅仅用普通nodejs方式就好)
前端网红,自从通过AMD、CMD模块化之后,javascript也有了头领的交椅,不再是小喽啰。
nodejs内置了允许通过端口进行调试
解决问题的思路
- Step 1:按照fabric的教程,在共享卷
mytest
目录下,能够node app.js
正常运行; - Step 2:通过修改
docker-compose.yml
开放docker相应的端口; - Step 3:在vsc中配置好
launch.json
文件; - Step 4:验证。
在共享卷mytest
下运行hfc示例
starter的docker-compose.yml
中有这么一段:
starter:
container_name: starter
image: hyperledger/fabric-starter-kit
volumes:
# tweak this to map a local developmnt directory tree into the container
- ~/mytest:/user/mytest
它定义了将主机上的~/mytest
映射到镜像下的/user/mytest
目录。
docker-compose up
启动镜像之后,在终端下通过docker exec -it starter /bin/bash
进入镜像后,需要到/user/mytest
目录下执行两条命令准备运行环境:
npm install /opt/gopath/src/github.com/hyperledger/fabric/sdk/node
npm install hfc
然后运行node app.js
,结果如下:
开放docker相应的端口
在starter的docker-compose.yml中增加两行开放5858端口,代码如下:
starter:
container_name: starter
image: hyperledger/fabric-starter-kit
volumes:
# tweak this to map a local developmnt directory tree into the container
- ~/mytest:/user/mytest
ports:
- "5858:5858"
运行docker-compose down
之后运行docker-compose up
,端口开放生效。
在vsc中配置launch.json
文件
在主机安装vsc之后,打开本机的~/mytest
目录,在vsc自动生成的launch.json
文件基础上修改如下:
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "启动程序",
"program": "${workspaceRoot}/index.js",
"cwd": "${workspaceRoot}"
},
{
"type": "node",
"request": "attach",
"name": "附加到进程",
"port": 5858,
"address": "localhost",
"restart": false,
"sourceMaps": false,
"outDir": null,
"localRoot": "${workspaceRoot}/",
"remoteRoot": "/user/mytest/"
}
]
}
我们真正用到的是这个配置中的attach
部分,它在nodejs进程运行起来之后,通过5858端口对其进行debug。
验证
- 在docker镜像下,在
/user/mytest/
目录下,执行node --debug-brk app.js
,以单行debug运行hfc示例
- 在vsc下,以
attach
方式进入debug,界面停在首行,调试模式完成。