Cómo hacer que un contenedor Docker hable con geth.ipc en el host local

from web3 import Web3

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

Tengo el script anterior Dockerizado y estoy tratando de conectarme a geth.ipcun host local y parece que no puedo conectarme.

Así es como ejecuto Docker:

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

He verificado que geth.ipcexiste en el /Ethereumdirectorio pero parece que no puedo conectarme a él. ¿Hay una manera de hacerlo?

La pregunta podría estar relacionada con esto y aquí está mi pregunta original https://stackoverflow.com/questions/52715141/how-to-make-a-docker-container-talk-to-geth-on-local-host

Si alguien está interesado, envié un problema en geth repo: github.com/ethereum/go-ethereum/issues/17907

Respuestas (3)

Si monta la carpeta que contiene el archivo IPC en lugar del archivo directamente, funcionará.

¿Puede el permiso causar un problema? Es decir, ¿el usuario que ejecuta la instancia de docker tendrá acceso al socket creado por el usuario en localhost?
Si lo monta a través del indicador -v, entonces no debería haber ningún problema de permisos.

Usarhost.docker.internal

Esto funciona en Docker para Mac y Docker para Windows.

Si estás en Linux, las cosas se vuelven más complejas. Eche un vistazo a https://stackoverflow.com/questions/24319662/from-inside-of-a-docker-container-how-do-i-connect-to-the-localhost-of-the-mach

Este enfoque no parece funcionar. Enviaré un problema con geth

geth.ipc representa un "Socket de Dominio Unix".

Este artículo tiene pasos para exponer suck a socket to docker container.

https://www.jujens.eu/posts/es/2017/feb/15/docker-unix-socket/