Kann ich Docker und Geth separat ausführen?

Ich betreibe ein privates Geth-Testnet und mein Programm befindet sich im Docker. Jedes Mal, wenn ich versuche, api aufzurufen, erhalte ich: keine JSON-RCP-Antwort. Muss ich geth auch auf Docker ausführen?

Ihr Programm hat keinen Zugriff auf das Host-Betriebssystem.

Antworten (2)

Etwas, das Sie ausprobieren könnten, ist ein Docker-Compose mit Ihrer App und einem integrierten Geth- Docker-Image .

Zum Beispiel

docker-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"
    (...)

Erstellen Sie das Bild

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

Starte es

$ docker-compose -f docker-compose.yml up
meine docker-compose.yml:
versuchst du dich zu verbinden http://localhost:8545?
Stellen Sie in Dockerfile 8545 bereit:EXPOSE 8545

Ich bin auf das gleiche Problem gestoßen. Ich hatte einen Webserver, der in einem Docker-Container lief, und einen Ethereum-Knoten (für Testnet), der auf meiner Maschine lief. Es schien, dass die App in Docker keine Verbindung zu dem Knoten außerhalb davon herstellen kann. So habe ich dieses Problem gelöst, ohne den Geth-Knoten in meinem Container ausführen zu müssen:

  1. Stellen Sie sicher, dass Sie die Flags --rpc und --rpccorsdomain haben, wenn Sie Geth starten
  2. Stellen Sie in Ihrer Anwendung, die in Docker ausgeführt wird, sicher, dass Sie Ihren Web3-Anbieter korrekt auf Ihren Computer verweisen https://docs.docker.com/docker-for-mac/networking/ für meinen Computer, den ich verwenden musste: „docker.for.mac .localhost".

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