В моём случае эта ошибка выходила при попытке скачивания go пакетов при установке chaincode. Сразу скажу, что установка сертификатов CA в локальную систему или использование прокси не поможет, так как при установке происходит build нового docker образа и всё выполняется внутри сборки.

Я думаю многим и так понятно, что собственно означает эта ошибка, но, если нет - это означает что между вами и выходом в интернет стоит кто-то посередине и перехватывает ваш трафик. К сожалению, в моём случае избавиться от этого невозможно, так как это государственное учреждение.

Debug

Для начала давайте отловим ошибку используя gliderlabs/logspout, о котором я писал тут.

docker run -d --name="logspout" --volume=/var/run/docker.sock:/var/run/docker.sock --publish=127.0.0.1:8000:80 gliderlabs/logspout

curl http://127.0.0.1:8000/logs

В другой сессии сделаем сборку chaincode и собственно произведём его установку.

peer lifecycle chaincode package fabcar.tar.gz --path chaincode/fabcar/ --lang golang --label fabcar_1

peer lifecycle chaincode install fabcar.tar.gz

И тут в логах gliderlabs/logspout мы видим следующую строку:

peer1.org1.exxample.com|/go/pkg/mod/google.golang.org/grpc@v1.48.0/status/status.go:35:2: google.golang.org/genproto@v0.0.0-20220719170305-83ca9fad585f: Get : x509: certificate signed by unknown authority

Т.е. получается, что это peer пытается выкачать все эти пакеты? Не совсем так, потому что выше есть строка, благодаря которой можно понять, что происходит buld нового образа для chaincode используя образ fabric-ccenv (from).

[chaincode.platform.util] DockerBuild -> Docker build failed using options: Image=hyperledger/fabric-ccenv:2.4 Env=[GOPROXY=https://proxy.golang.org] Cmd=

Решение

Теперь мы хоть знаем где именно ломается. И так первый выход — это использование прокси сервера, если у вас он конечно есть (не мой случай), а второй это разрешить ставить пакеты без проверки валидности ssl сертификатов. Но во всех решениях нам будет необходимо собрать свой docker образ, хорошо если вы уже это делали.

Вариант с прокси

Как я уже говорил нужно будет пересобрать образ для hyperledger/fabric-ccenv.

  • Для начала удаляем существующий образ:
    docker image ls | grep ccenv
    docker image rm hyperledger/fabric-ccenv:2.4
    
  • Теперь создаём Dokcerfile, в котором в поле from указываем тот же образ, который мы удалили.
    mkdir /tmp/image && cd /tmp/image
    vim Dockerfile
    
FROM  hyperledger/fabric-ccenv:2.4

ENV  HTTP_PROXY=http://192.168.0.1:5000
ENV  HTTPS_PROXY=http://192.168.0.1:5000
  • Создаём образ, где именем образа будет тоже самое что мы удаляли.
    docker build -t hyperledger/fabric-ccenv:2.4 .
    docker image ls | grep ccenv
    
hyperledger/fabric-ccenv 2.4       63b3ecbf2083   16 seconds ago   520MB
  • Снова выполняем установку chaincode
    peer lifecycle chaincode install fabcar.tar.gz
    
 Installed remotely: response:<status:200 payload:"\nIfabcar_1:6c333d70725857f3b3d3c5a3a9ce42b968741dc3889b748a2097d7687b91a0e7\022\010fabcar_1" >
  • Теперь давайте посмотрим, что у нас появился новый образ для chaincode.
    docker image ls | grep fabcar
    
fabcar_1-6ccad5cf477e6d0ac     latest    d22763d63a89   About a minute ago   23.4MB

Вариант с отключением проверки ssl

Сразу оговорюсь что для этого метода нам также будет необходимо указать версию go самую новую, потому как старые версии не поддерживают переменную GOINSECURE.

  • Для начала удаляем существующий образ:
    docker image ls | grep ccenv
    docker image rm hyperledger/fabric-ccenv:2.4
    
  • Теперь создаём Dokcerfile, в котором в поле from указываем тот же образ, который мы удалили.
    mkdir /tmp/image && cd /tmp/image
    vim Dockerfile
    
FROM  hyperledger/fabric-ccenv:2.4

ENV GOINSECURE="*"
ENV GONOSUMDB="*"
ENV GOPRIVATE="*"
ENV GOLANG_VERSION=1.19.5
  • Создаём образ, где именем образа будет тоже самое что мы удаляли.
    docker build -t hyperledger/fabric-ccenv:2.4 .
    docker image ls | grep ccenv
    
hyperledger/fabric-ccenv 2.4       63b3ecbf2083   4 seconds ago   520MB
  • Снова выполняем установку chaincode
    peer lifecycle chaincode install fabcar.tar.gz
    
 Installed remotely: response:<status:200 payload:"\nIfabcar_1:6c333d70725857f3b3d3c5a3a9ce42b968741dc3889b748a2097d7687b91a0e7\022\010fabcar_1" >
  • Теперь давайте посмотрим что у нас появился новый образ для chaincode.
    docker image ls | grep fabcar
    
fabcar_1-6ccad5cf477e6d0ac     latest    d22763d63a89   About a minute ago   23.4MB

В итоге

Первый метод конечно более безопасный в какой-то степени, но не всегда есть возможность использовать прокси сервер.