繁体   English   中英

Linux 上的 docker-compose `host-gateway` 无法连接到 RPC (v20.10.1)

[英]docker-compose `host-gateway` on Linux cannot connect to RPC (v20.10.1)

随着 Docker 20.10的出现, host-gateway应该可以在 Linux 平台上使用(详见这个精彩的答案)。 因此,应该可以创建与平台无关的docker-compose脚本。 (我本人在 Debian 上。)

以下是一些问题和答案的链接,这些问题和答案有助于我走到这一步: hereherehere (以及其他一些答案和评论)

我正在尝试创建一个用于运行The Graph的脚本,其中包括让ipfspostgres在 Docker 容器内运行,并连接到 Docker 之外的区块链实例(在端口 8545 上)。 这是脚本:

 version: '3'
services:
  graph-node:
    extra_hosts:
      - "host.docker.internal:host-gateway"
    image: graphprotocol/graph-node
    ports:
      - '8000:8000'
      - '8001:8001'
      - '8020:8020'
      - '8030:8030'
      - '8040:8040'
    depends_on:
      - ipfs
      - postgres
    environment:
      postgres_host: postgres
      postgres_user: graph-node
      postgres_pass: let-me-in
      postgres_db: graph-node
      ipfs: 'ipfs:5001'
      ethereum: 'localhost:http://host.docker.internal:8545'
      RUST_LOG: info
  ipfs:
    image: ipfs/go-ipfs:v0.4.23
    ports:
      - '5001:5001'
    volumes:
      - ./data/ipfs:/data/ipfs
  postgres:
    image: postgres
    ports:
      - '5432:5432'
    command: ["postgres", "-cshared_preload_libraries=pg_stat_statements"]
    environment:
      POSTGRES_USER: graph-node
      POSTGRES_PASSWORD: let-me-in
      POSTGRES_DB: graph-node
    volumes:
      - ./data/postgres:/var/lib/postgresql/data

Docker 启动正常,并且ipfspostgresgraph-node的实例都启动正常,但是随后graph-node的 RPC 调用(对区块链)都失败,并出现类似于以下的错误:

WARN Trying again after eth_getBlockByNumber(0, false) RPC call failed (attempt #18) with result Err(Transport error: Error(Connect, Os { code: 111, kind: ConnectionRefused, message: "Connection refused" }))

我使用extra-hosts错了吗? 我可以做些什么来使这个脚本既能在我的 Linux 机器上工作,又能在 Mac 和 Windows 用户上工作?

谢谢!

您主机上运行的应用程序可能绑定到与 Docker 使用的接口不同的接口。

您可以使用netstat检查:

$ netstat -pan | grep 8545
tcp6       0      0 127.0.0.1:8545          :::*                    LISTEN      496150/java

如果它正在监听127.0.0.1 ,就像在这个例子中一样,这意味着它只能通过环回接口访问。

解决方案是找出主机网关指向的 IP 地址,并确保服务绑定到该 IP 地址而不是 127.0.0.1。

如果服务在所有接口上都可用(包括例如您的 wifi 网络)没有问题,您可以绑定到0.0.0.0以使其在所有接口上可用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM