The*_*nce 8 linux localhost docker docker-compose
随着 Docker 的出现20.10,host-gateway应该可以在 Linux 平台上使用(详见这个精彩的答案)。因此,应该可以创建一个docker-compose与平台无关的脚本。(我本人使用的是 Debian。)
以下是一些问题和答案的链接,对我到目前为止有帮助:这里,这里,和这里(以及一些其他答案和评论)
我正在尝试创建一个用于运行The Graph 的脚本,其中涉及在 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
Run Code Online (Sandbox Code Playgroud)
Docker 启动得很好,并且 、 和 的实例ipfs都postgres启动graph-node得很好,但是 的graph-nodeRPC 调用(对区块链)全部失败,并出现类似于以下内容的错误:
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" }))
Run Code Online (Sandbox Code Playgroud)
难道是我用extra-hosts错了?我怎样才能让这个脚本既能在我的 Linux 机器上运行,又能在 Mac 和 Windows 用户上运行?
谢谢!
您的主机上运行的应用程序可能绑定到与 Docker 使用的接口不同的接口。
您可以检查netstat:
$ netstat -pan | grep 8545
tcp6 0 0 127.0.0.1:8545 :::* LISTEN 496150/java
Run Code Online (Sandbox Code Playgroud)
如果它正在监听127.0.0.1,就像本例中一样,这意味着它只能通过环回接口访问。
解决方案是找出主机网关指向的 IP 地址,并确保服务绑定到该 IP 地址而不是 127.0.0.1。
如果服务在所有接口(包括例如您的 wifi 网络)上可用时没有问题,您可以绑定0.0.0.0以使其在所有接口上可用。
| 归档时间: |
|
| 查看次数: |
5855 次 |
| 最近记录: |