在Docker环境下设置IPFS集群

7

我正在尝试使用docker建立一个由两个节点组成的私有IPFS群集。为此,我使用ipfs/ipfs-cluster:latest镜像。

我的docker-compose文件如下:

version: '3'
services:
  peer-1:
    image: ipfs/ipfs-cluster:latest
    ports:
      - 8080:8080
      - 4001:4001
      - 5001:5001
    volumes:
      - ./cluster/peer1/config:/data/ipfs-cluster
  peer-2:
    image: ipfs/ipfs-cluster:latest
    ports:
      - 8081:8080
      - 4002:4001
      - 5002:5001
    volumes:
      - ./cluster/peer2/config:/data/ipfs-cluster

在启动容器时出现以下错误。
ERROR   ipfshttp: error posting to IPFS: Post http://127.0.0.1:5001/api/v0/repo/stat?size-only=true: dial tcp 127.0.0.1:5001: connect: connection refused ipfshttp.go:745

输入图像描述 请帮忙解决这个问题。

有没有关于如何在docker上设置IPFS集群的适当文档。 这篇 文档缺少很多细节。

谢谢。

2个回答

4
我学会了在docker环境下运行多节点IPFS集群。当前的ipfs/ipfs-cluster版本号为0.4.17,它不能运行ipfs对等体即ipfs/go-ipfs。我们需要单独运行它。
因此,现在为了在docker环境下运行多节点(在本例中是两个节点)IPSF集群,我们需要运行2个IPFS peer容器和2个IPFS cluster容器,每个容器对应一个peer。
所以你的docker-compose文件看起来应该像这样:
version: '3'

networks:
  vpcbr:
    driver: bridge
    ipam:
     config:
       - subnet: 10.5.0.0/16

services:
  ipfs0:
    container_name: ipfs0
    image: ipfs/go-ipfs
    ports:
          - "4001:4001"
          - "5001:5001"
          - "8081:8080"
    volumes:
      - ./var/ipfs0-docker-data:/data/ipfs/
      - ./var/ipfs0-docker-staging:/export
    networks:
      vpcbr:
        ipv4_address: 10.5.0.5

  ipfs1:
    container_name: ipfs1
    image: ipfs/go-ipfs
    ports:
          - "4101:4001"
          - "5101:5001"
          - "8181:8080"
    volumes:
      - ./var/ipfs1-docker-data:/data/ipfs/
      - ./var/ipfs1-docker-staging:/export
    networks:
      vpcbr:
        ipv4_address: 10.5.0.7

  ipfs-cluster0:
    container_name: ipfs-cluster0
    image: ipfs/ipfs-cluster
    depends_on:
      - ipfs0
    environment:
      CLUSTER_SECRET: 1aebe6d1ff52d96241e00d1abbd1be0743e3ccd0e3f8a05e3c8dd2bbbddb7b93
      IPFS_API: /ip4/10.5.0.5/tcp/5001
    ports:
          - "9094:9094"
          - "9095:9095"
          - "9096:9096"
    volumes:
      - ./var/ipfs-cluster0:/data/ipfs-cluster/
    networks:
      vpcbr:
        ipv4_address: 10.5.0.6

  ipfs-cluster1:
    container_name: ipfs-cluster1
    image: ipfs/ipfs-cluster
    depends_on:
      - ipfs1
      - ipfs-cluster0
    environment:
      CLUSTER_SECRET: 1aebe6d1ff52d96241e00d1abbd1be0743e3ccd0e3f8a05e3c8dd2bbbddb7b93
      IPFS_API: /ip4/10.5.0.7/tcp/5001
    ports:
          - "9194:9094"
          - "9195:9095"
          - "9196:9096"
    volumes:
      - ./var/ipfs-cluster1:/data/ipfs-cluster/
    networks:
      vpcbr:
        ipv4_address: 10.5.0.8

这将会启动两个IPFS集群,我们可以使用任意一个节点来存储和检索文件。
这里的关键是需要提供IPFS_API给ipfs-cluster作为环境变量,以便ipfs-cluster知道对应的节点。同时,对于这两个ipfs-cluster,我们需要拥有相同的CLUSTER_SECRET。

0
根据您发布的文章:

容器不运行go-ipfs。 您应该单独运行IPFS守护程序,例如使用ipfs / go-ipfs Docker容器。 我们建议挂载/data/ipfs-cluster文件夹以提供自定义的工作配置以及集群数据的持久性。 通常通过传递-v:/data/ipfs-cluster来实现。

如果实际上您需要连接到docker-compose中的另一个服务,则可以简单地通过服务名称引用它,因为主机名条目在docker-compose中的所有容器中创建,因此服务可以通过名称而不是IP进行通信。

此外:

除非您使用--net = host运行docker,否则您需要设置$IPFS_API或确保配置具有正确的node_multiaddress。

docker-compose中--net = host的等效方式是network_mode:“host”(与端口映射不兼容)https://docs.docker.com/compose/compose-file/#network_mode


有没有教程或示例介绍如何使用Docker设置IPFS群集。 关于分别运行go-ipfs docker,如果我们分别运行它,那么如何将go-ipfs与ipfs-cluster连接起来? - Subhankar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接