@lexa78

Почему не подключается узел через bootnode?

Всем привет. Хочу создать приватную сеть ethereum blockchain, чтобы можно было развернуть ее в docker. Но, почему-то узлы не могут синхронизироваться. Они находят bootnode, но, при подключении возникает ошибка
Dial error id=8d5107cf4e03772d addr=172.25.0.101:30311 conn=dyndial err="connect: connection refused"

При этом все контейнеры в docker запущены и работают. Но, при публикации контракта, он зависает, т.к. никто не может его подтвердить. И вызов метода
net_peerCount()
возвращает 0.
Мой docker-compose.yml

version: '3'

services:
    nginx:
        image: nginx:latest
        ports:
            - "80:80"
            - "443:443"
        volumes:
            - ./hosts:/etc/nginx/conf.d
            - ./www:/var/www
            - ./logs/nginx:/var/log/nginx
        links:
            - php
        networks:
          chainnet:
            ipv4_address: 172.25.0.120
    php:
        build: ./images/php
        links:
            - mysql
        volumes:
            - ./www:/var/www
        networks:
          chainnet:
            ipv4_address: 172.25.0.110
    geth-bootnode:
        hostname: geth-bootnode
        environment:
            - nodekeyhex=08f0e1dee5c1b4645f3331a566009e41a4514b6cd28656d63d0449ecf812812b #Needs to be fix, so that the miners know the resulting enode id
            - ip=172.25.0.101:30311
        build:
            context: ./images/bootnode
        ports:
            - 30311:30311/udp
        networks:
            chainnet:
                ipv4_address: 172.25.0.101
    geth-dev-miner-1:
        hostname: geth-dev-miner-1
        depends_on:
            - geth-bootnode
        environment:
            - address=0x8cc5a1a0802db41db826c2fcb72423744338dcb0 
            - bootnodeId=76a8171707eca17647a47ca99ffd348927dfa60102792ea349a25d5192e61855be83b786e376276a306afcceea4ffd1c9c77e4370b417efc39f328a0d068004c 
            - bootnodeIp=172.25.0.101
            - port=30312
        build:
            context: ./images/miner
            args:
                privatekey: df504d175ae63abf209bad9dda965310d99559620550e74521a6798a41215f46 
                password: pass
        container_name: geth-miner-1
        ports:
            - 8545:8545
        volumes:
            - eth-data-1:/ethchaindata/.ethash
        networks:
            chainnet:
                ipv4_address: 172.25.0.102
    payment-wallet:
        hostname: payment-wallet
        depends_on:
            - geth-bootnode
        environment:
            - address=0x53bea6b968af89da6ffbd86f7669f44745781055 #derived from the private key which is passed in the args
            - bootnodeId=76a8171707eca17647a47ca99ffd348927dfa60102792ea349a25d5192e61855be83b786e376276a306afcceea4ffd1c9c77e4370b417efc39f328a0d068004c #derived from the nodekeyhex of the bootnode
            - bootnodeIp=172.25.0.101
            - port=30315
        build:
            context: ./images/node
            args:
                privatekey: 730fe7a7ea6f1c8fcec26e102bea05191bd30675c3c17b9a67626397ac9f0e4a
                password: payment-wallet
        container_name: payment-wallet
        ports:
            - 8547:8545
        volumes:
            - payment-wallet:/ethchaindata/.ethash
        networks:
            chainnet:
                ipv4_address: 172.25.0.108
networks:
    chainnet:
        driver: bridge
        ipam:
            config:
                - subnet: 172.25.0.0/24

volumes:
    eth-data-1:
    payment-wallet:


Dockerfile майнера

FROM ubuntu:xenial

WORKDIR "/opt"

RUN apt-get update \
    && apt-get install -y software-properties-common \
    && add-apt-repository -y ppa:ethereum/ethereum \
    && apt-get update \
    && apt-get install -y ethereum

ADD ./genesis.json ./genesis.json
RUN geth init genesis.json

ARG password
ARG privatekey
RUN echo $password > ~/.accountpassword && echo $privatekey > ~/.privatekey

RUN geth account import --password ~/.accountpassword  ~/.privatekey

ENV address=""
ENV bootnodeId=""
ENV bootnodeIp=""
ENV port=""
CMD exec geth --bootnodes "enode://$bootnodeId@$bootnodeIp:30311" --networkid="500" --verbosity=5 --mine --miner.threads=2 --miner.etherbase $address --unlock $address --password ~/.accountpassword --syncmode full --port $port --nat extip:$bootnodeIp



Для узла, который публикует контракт, dockerfile такой же, только geth запускается без --mine, но с --http

Подскажите пожалуйста, в какую сторону копать хотя бы.
  • Вопрос задан
  • 147 просмотров
Пригласить эксперта
Ответы на вопрос 1
@KingstonKMS
Порт tcp 30311 тоже необходимо пробросить в контейнер
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы