В моём случае эта ошибка выходила при попытке скачивания 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
В итоге
Первый метод конечно более безопасный в какой-то степени, но не всегда есть возможность использовать прокси сервер.
Комментарии