Настройка IPFS кластера в среде докера - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь настроить частный кластер IPFS с 2 узлами, используя Docker.Для этого я использую 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

enter image description here Пожалуйста, помогитес проблемой.

Есть ли надлежащая документация о том, как настроить кластер IPFS на докер. Этот документ содержит много деталей.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Я понял, как запустить многоузловой кластер IPFS в среде докера.Текущая версия ipfs/ipfs-cluster версии 0.4.17 не запускает ipfs peer, т.е. ipfs/go-ipfs.Нам нужно запустить его отдельно.

Итак, теперь для запуска многоузлового (в данном случае 2 узла) кластера IPSF в среде докера нам нужно запустить 2 одноранговых контейнера IPFS и 2 кластерных кластера IPFS 1, соответствующих каждому одноранговому узлу.

Таким образом, ваш файл 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

Это будет вращать 2-х одноранговый кластер IPFS, и мы можем сохранять и извлекать файл, используя любой одноранговый узел.

улов здесь - нам нужно предоставить IPFS_API для ipfs-cluster в качестве переменной среды, чтобы ipfs-cluster знал своего соответствующего партнера.И для обоих ipfs-кластеров у нас должен быть одинаковый CLUSTER_SECRET.

0 голосов
/ 27 сентября 2018

Согласно опубликованной вами статье:

Контейнер не запускает go-ipfs.Вы должны запустить демон IPFS отдельно, например, с помощью контейнера Docker ipfs / go-ipfs.Мы рекомендуем монтировать папку / data / ipfs-cluster, чтобы обеспечить настраиваемую рабочую конфигурацию, а также постоянство данных кластера.Обычно это достигается передачей -v: / data / ipfs-cluster в docker run).

Если на самом деле вам нужно подключиться к другой службе в docker-compose, вы можете просто обратиться кэто по имени службы, поскольку записи имени узла создаются во всех контейнерах в docker-compose, поэтому службы могут общаться друг с другом по имени, а не по ip

Дополнительно:

вы запускаете docker с --net = host, вам нужно будет установить $ IPFS_API или убедиться, что в конфигурации указан правильный адрес node_multiaddress.

Эквивалент --net = host в docker-compose равен network_mode: "host" (несовместимо с отображением портов) https://docs.docker.com/compose/compose-file/#network_mode

...