У меня проблемы с использованием именованных томов в одном из моих стеков докеров.
В основном я использую биткойн-узел, разработанный bcoin. Я пытаюсь добиться того, чтобы контейнеры, на которых выполнялись узлы, записывали и считывали данные блокчейна с тома Digital Ocean, подключенного к одной из моих капель (ВМ). Я предполагаю, что у меня возникли некоторые проблемы, потому что я обычно использую тома только в одном направлении, когда в моих контейнерах присутствуют вещи на моей хост-машине.
Этот том DO присутствует в каталоге /mnt/blockchain-data
в моем узле диспетчера (или дроплете).
Итак, вот мой файл docker-stack.yml:
version: "3.6"
services:
bcoin:
image: hollarves/bcoin-mueve
ports:
#-- Mainnet
# - "8333:8333"
# - "8332:8332" # RPC/HTTP
# - "8334:8334" # Wallet
#-- Testnet
- "18333:18333"
- "18332:18332" # RPC/HTTP
- "18334:18334"
networks:
- bitcoin-private-net
volumes:
- blockchain:/data
- ${PWD}/bitcoin/secrets/bcoin.conf:/data/bcoin.conf
- ${PWD}/bitcoin/secrets/wallet.conf:/data/wallet.conf
environment:
BCOIN_CONFIG: /data/bcoin.conf
deploy:
labels:
- "traefik.docker.network=bitcoin-net"
- "traefik.bcoin.frontend.rule=Host:bcoin.xxxx.com"
- "traefik.bcoin.backend=bcoin"
- "traefik.bcoin.port=18332"
- "traefik.bcoin.frontend.entryPoints=http"
- "traefik.bcoin-wallet.frontend.rule=Host:bcoin-wallet.xxxx.com"
- "traefik.bcoin-wallet.backend=bcoin-wallet"
- "traefik.bcoin-wallet.port=18334"
- "traefik.bcoin-wallet.frontend.entryPoints=http"
placement:
constraints:
- node.role == manager
volumes:
blockchain:
driver: local
driver_opts:
type: bind
device: :/mnt/blockchain-data
networks:
bitcoin-private-net:
external: true
Итак, я хочу, чтобы все, что находится в каталоге /data
моих контейнеров, было синхронизировано с тем, что находится в моем /mnt/blockchain-data
на моей хост-машине. Если контейнер записывает несколько новых блоков, они должны быть скопированы в каталог /mnt/blockchain-data
, а если реплицируется новый биткойн-узел, у него уже должен быть каталог данных, синхронизированный с файлами на моем хост-компьютере.
Основная идея состоит в том, чтобы избежать повторной загрузки блокчейна всякий раз, когда узел уничтожается и воссоздается по любой причине. Помимо возможности реплицировать столько узлов, сколько мне нужно, без необходимости загружать блокчейн для каждого из них.
Есть идеи, что я могу делать не так?
Спасибо!