Wie man einen Docker-Container dazu bringt, mit geth.ipc auf dem lokalen Host zu kommunizieren

from web3 import Web3

web3 = Web3(Web3.IPCProvider("/Ethereum/geth.ipc"))
print(f'IPC connected: {web3.isConnected()}')  # want to return True

Ich habe das obige Skript angedockt und versuche, eine Verbindung zu einem geth.ipclokalen Host herzustellen, und ich kann anscheinend keine Verbindung herstellen.

So führe ich Docker aus:

docker run --mount type=bind,source=$HOME/Library/Ethereum,target=/Ethereum container1

Ich habe überprüft, dass geth.ipces im /EthereumVerzeichnis existiert, kann aber anscheinend keine Verbindung herstellen. Gibt es eine Möglichkeit, es zu tun?

Die Frage könnte damit zusammenhängen und hier ist meine ursprüngliche Frage https://stackoverflow.com/questions/52715141/how-to-make-a-docker-container-talk-to-geth-on-local-host

Falls jemand interessiert ist, ich habe ein Problem bei Geth Repo eingereicht: github.com/ethereum/go-ethereum/issues/17907

Antworten (3)

Wenn Sie den Ordner mit der IPC-Datei statt der Datei direkt mounten, funktioniert es.

Kann die Erlaubnis ein Problem verursachen? Das heißt, wird der Benutzer, der die Docker-Instanz ausführt, Zugriff auf den Socket haben, der vom Benutzer auf localhost erstellt wurde?
Wenn Sie es über das Flag -v mounten, sollte es keine Berechtigungsprobleme geben.

Verwendenhost.docker.internal

Dies funktioniert auf Docker für Mac und Docker für Windows.

Wenn Sie Linux verwenden, werden die Dinge komplexer. Bitte werfen Sie einen Blick auf https://stackoverflow.com/questions/24319662/from-inside-of-a-docker-container-how-do-i-connect-to-the-localhost-of-the-mach

Dieser Ansatz scheint nicht zu funktionieren. Ich werde ein Problem mit Geth einreichen

geth.ipc repräsentiert einen "Unix Domain Socket".

Dieser Artikel enthält Schritte zum Verfügbarmachen eines Sockets für den Docker-Container.

https://www.jujens.eu/posts/en/2017/Feb/15/docker-unix-socket/