首页 > 解决方案 > Hyperledger Fabric:拨打 unix /host/var/run/docker.sock:连接:没有这样的文件或目录

问题描述

尝试实例化链码时出现此错误:

2019-03-14 23:17:01.917 UTC [dockercontroller] Start -> ERRO 152d start-could not recreate container <dev-peer1-kp-mycc-1.0>, because of Post http://unix.sock/containers/create?name=dev-peer1-kp-mycc-1.0: dial unix /host/var/run/docker.sock: connect: no such file or directory

我们可以/var/run/docker.sock在主机上看到一个文件:

$ ls /var/run/docker.sock
/var/run/docker.sock

我们怎样才能解决这个问题?

编辑:我们使用与 [ 1 ]几乎相同的配置,只是我们没有安装/var/run到容器上。根据 [ 2 ] ,这似乎是一个很大的安全漏洞

标签: dockerhyperledger-fabric

解决方案


TL;DR:我们必须挂载/var/run到 docker 容器才能使其工作。

回复:通过 tcp 暴露 docker 守护进程,这对安全漏洞没有任何影响,因为在这两种情况下(文件挂载与 tcp),守护进程已经暴露给容器,这就是漏洞所在。

如果我们尝试将 CORE_VM_ENDPOINT 设置为http://172.17.0.1:2375,则会出现连接被拒绝的错误,因为没有人在端口上监听。

要解决这个问题,似乎必须启用 docker daemon ( dockerd -H ...)。我们试图这样做,但出现了一些错误,说 PID 存在。看起来必须重新启动守护程序,而我们不想这样做。所以我们选择了文件挂载选项。

我们认为我们将在实例化链码后关闭对等点,从而解决安全漏洞,但如果我们这样做,那么调用链码会失败,因为再次调用依赖于与守护进程的通信。

2019-03-18 23:23:39.108 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> DEBU 04d ESCC invoke result: response:<status:500 message:"failed to execute transaction 9c8928ffda960c89225682d0c4d0936342b60c687dd7ea0547378a88fd5f6749: [channel dscsa] could not launch chaincode mycc:1.0: error starting container: error starting container: Post http://unix.sock/containers/create?name=dev-peer1-kp-mycc-1.0: dial unix /host/var/run/docker.sock: connect: no such file or directory" >

推荐阅读