Могу ли я запустить отдельно докер и гет?

Я запускаю частную тестовую сеть geth, и моя программа находится в докере. Каждый раз, когда я пытаюсь вызвать API, я получаю: нет ответа JSON RCP. Должен ли я запускать geth и на докере?

Ваша программа не имеет доступа к ОС хоста.

Ответы (2)

Что-то, что вы можете попробовать, это docker-compose с вашим приложением и встроенным образом докера geth .

Например

докер-compose.yml

version: '3'
services:
  geth:
    image: kunstmaan/ethereum-geth-testnet
    ports:
      - "8545:8545"
      - "30303:30303"
    stdin_open: true
    tty: true

  your_app:
    build: ./
    ports:
      - "8080:8080"
    (...)

Создайте образ

$ docker-compose -f docker-compose.yml build

Запустить его

$ docker-compose -f docker-compose.yml up
мой докер-compose.yml:
вы пытаетесь подключиться http://localhost:8545?
в Dockerfile вы выставляете 8545:EXPOSE 8545

Я столкнулся с той же проблемой. У меня был веб-сервер, работающий в контейнере Docker, и узел Ethereum (для тестовой сети), работающий на моей машине. Казалось, что приложение в Docker не сможет подключиться к узлу за его пределами. Вот как я решил эту проблему, не запуская узел Geth внутри моего контейнера:

  1. Убедитесь, что у вас установлены флаги --rpc и --rpccorsdomain при запуске Geth.
  2. В вашем приложении, работающем внутри Docker, убедитесь, что ваш провайдер web3 правильно указывает на вашу машину https://docs.docker.com/docker-for-mac/networking/ для моей машины, которую мне пришлось использовать: «docker.for.mac .локальный хост".

web3 = new Web3(new Web3.providers.HttpProvider("http://docker.for.mac.localhost:8545"));