Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux上的docker compose“主机网关”无法连接到RPC(v20.10.1)_Linux_Docker_Docker Compose_Localhost - Fatal编程技术网

Linux上的docker compose“主机网关”无法连接到RPC(v20.10.1)

Linux上的docker compose“主机网关”无法连接到RPC(v20.10.1),linux,docker,docker-compose,localhost,Linux,Docker,Docker Compose,Localhost,随着Docker20.10的出现,主机网关应该可以在Linux平台上使用(如精彩答案中所述)。因此,应该可以创建平台无关的docker compose脚本。(我自己也在Debian上。) 以下是一些有助于我走到这一步的问题和答案的链接:,和(以及其他一些答案和评论) 我正在尝试创建一个运行脚本,包括在Docker容器内运行ipfs和postgres,并连接到Docker外部的区块链实例(在端口8545上)。以下是脚本: version: '3' services: graph-node:

随着Docker
20.10
的出现,
主机网关
应该可以在Linux平台上使用(如精彩答案中所述)。因此,应该可以创建平台无关的
docker compose
脚本。(我自己也在Debian上。)

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

我正在尝试创建一个运行脚本,包括在Docker容器内运行
ipfs
postgres
,并连接到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启动正常,
ipfs
postgres
graph节点的实例都启动正常,但是
graph节点的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" }))
我是否使用了
额外主机
错误?我能做些什么使这个脚本既能在我的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
,使其在所有接口上都可用。

您找到解决该问题的方法了吗?我也有同样的问题。@Twixx不幸的是,我现在遇到了这个问题。它只是随机开始发生。当我ssh进入graph node docker时,我可以ping进入主机没有问题,但只要我添加端口8545以连接到链,我就得到了连接拒绝。我在hardhat节点上使用--hostname 0.0.0.0选项,所以不确定这里会发生什么…嗯,现在它可以随机工作了。。。似乎是这个--hostname 0.0.0.0选项在hardhat节点上修复了它。