Hyperledger Fabric:拨打Unix /host/var/run/docker.sock:connect:没有这样的文件或目录

时间:2019-03-14 23:26:20

标签: docker hyperledger-fabric

在尝试实例化链码时,我们会收到此错误:

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]

,这似乎是一个很大的安全漏洞

3 个答案:

答案 0 :(得分:0)

因为您不必依赖在容器中安装/var/run/docker.sock。您还可以通过tcp connection启用docker守护程序,然后将CORE_VM_ENDPOINT的值修改为CORE_VM_ENDPOINT=http://172.17.0.1:2375

  

考虑检查您要向其公开API的IP。

答案 1 :(得分:0)

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" >

答案 2 :(得分:0)

我们在 MacOS 上使用 Docker Desktop 3.0+ 时遇到了同样的问题,Hyperledger Fabric 1.4.3 实例化了一个智能合约。我们将 Docker 版本更改为 2.5+,一切正常。