Docker 环境中的 Ethers.js JsonRpcProvider Geth 节点

Alp*_*a60 6 docker blockchain docker-compose ethereum geth

我正在尝试将 Ethers.js 连接到在 Docker 容器中运行的本地 Ehereum 节点 (Geth)。在客户端,我以这种方式创建提供程序:new ethers.providers.JsonRpcProvider('http://geth:8545')geth是节点容器主机名,并且两个容器位于同一网络上:我可以从客户端容器内 ping Geth 节点。当我开始从客户端请求节点时,出现错误"noNetwork"

当我在没有 Docker 的情况下运行客户端,通过 请求节点容器时http://localhost:8545,它工作正常。

怎么了?

  • Geth 节点的 Docker-compose 文件:
version: "3.5"

services:
  geth:
    container_name: geth
    image: ethereum/client-go:latest
    volumes:
      - /etc/geth:/root/.ethereum:rw
    ports:
      - "8545:8545"
      - "30303:30303"
    networks:
      - ethereum
    entrypoint: "geth --nousb --http --http.corsdomain '*' --http.addr 0.0.0.0 --http.api personal,eth,net,web3 --syncmode light"

networks:
  ethereum:
    name: ethereum-net
Run Code Online (Sandbox Code Playgroud)
  • 客户端的 Docker-compose 文件:
version: "3.5"

services:
  eth-server:
    container_name: eth_server_dev
    build: packages/eth-server/.
    environment:
      - NODE_ENV=development
      - NODE_PORT=3002
    volumes:
      - ./packages/eth-server/log:/app/log:rw
    ports:
      - "3002:3000"
    networks:
      - ethereum

networks:
  ethereum:
    external:
      name: ethereum-net
Run Code Online (Sandbox Code Playgroud)
  • 错误:
/app/node_modules/@ethersproject/logger/lib/index.js:179
         var error = new Error(message);
                     ^

 Error: could not detect network (event="noNetwork", code=NETWORK_ERROR, version=providers/5.0.17)
     at Logger.makeError (/app/node_modules/@ethersproject/logger/lib/index.js:179:21)
     at Logger.throwError (/app/node_modules/@ethersproject/logger/lib/index.js:188:20)
     at JsonRpcProvider.<anonymous> (/app/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:407:54)
     at step (/app/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:46:23)
     at Object.throw (/app/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:27:53)
     at rejected (/app/node_modules/@ethersproject/providers/lib/json-rpc-provider.js:19:65)
     at processTicksAndRejections (node:internal/process/task_queues:93:5) {
   reason: 'could not detect network',
   code: 'NETWORK_ERROR',
   event: 'noNetwork'
 }
Run Code Online (Sandbox Code Playgroud)