Mac M1 Pro上Hyperledger Fabric链码安装报错求助
问题场景
在Mac M1 Pro设备上使用Docker Desktop v4.32.0部署Hyperledger Fabric v2.2.7双组织网络,Peer、CA、Orderer容器均正常运行,但执行链码安装命令:
peer lifecycle chaincode install snb-chaincode-chitgroup-act.tar.gz
时出现如下错误:
Error: chaincode install failed with status: 500 - failed to invoke backing implementation of 'InstallChaincode': could not build chaincode: docker build failed: docker image inspection failed: Get "http://unix.sock/images/prod-peer1.regulatororg.snbchain.com-snb-chaincode-chitgroup-act_1-e57cbc6399c641f23b9fc09c8777213886c981ee483d545f47c89d1ce7662d9n-38a9c951ca5cfece43263dd8043dc218f2cb9171cf38610474815d5bb595176/json": dial unix /host/var/run/docker.sock: connect: no such file or directory
已完成的配置:
- 启用Docker Desktop的"Allow the default Docker socket to be used (requires password)"选项
- 本地
/var/run/docker.sock为指向/Users/sridharreddyu/.docker/run/docker.sock的软链接 - Peer容器Compose配置已设置
CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock,并挂载/var/run/:/host/var/run/
解决方法
1. 直接挂载实际Docker Socket文件(核心步骤)
容器内无法解析宿主机的软链接路径,将Peer容器的卷挂载配置从挂载目录改为直接挂载实际socket文件:
修改Docker Compose中Peer服务的volumes字段:
volumes: # 替换原有的 /var/run/:/host/var/run/ - /Users/sridharreddyu/.docker/run/docker.sock:/host/var/run/docker.sock # 保留其他必要挂载项
修改后重启Peer容器:
docker-compose restart peer1.regulatororg.snbchain.com
2. 检查并调整Docker Socket权限
宿主机上执行以下命令,确认socket文件权限:
ls -l /Users/sridharreddyu/.docker/run/docker.sock
如果当前用户无访问权限,可临时调整权限(测试环境适用,生产环境建议通过用户组配置):
sudo chmod 666 /Users/sridharreddyu/.docker/run/docker.sock
3. 配置链码容器网络模式
在Peer容器的环境变量中添加网络模式配置,确保链码容器加入Fabric专用网络:
environment: # 原有环境变量保留 - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=snbchain # 替换为你的Fabric网络名称
4. 启用M1专属虚拟化框架
打开Docker Desktop设置 → Features in development,勾选"Use the new Virtualization framework",重启Docker Desktop。该选项可解决M1芯片上部分虚拟化兼容性问题。
5. 验证容器内Socket访问
进入Peer容器,执行命令验证socket连通性:
docker exec -it peer1.regulatororg.snbchain.com bash curl --unix-socket /host/var/run/docker.sock http://localhost/version
若返回Docker版本信息,说明socket访问正常。
内容的提问来源于stack exchange,提问作者Sidhu

