在我的一个Docker堆栈中使用命名卷时遇到一些问题。
基本上,我正在运行bcoin开发的比特币节点。我要实现的目标是让运行节点的容器从附着到我的一个液滴(VM)上的Digital Ocean卷中写入和读取区块链数据。我猜我遇到了一些问题,因为我通常仅以一种方式使用卷,即主机中的内容存在于容器中。
此DO卷存在于我的管理器节点(或Droplet)中的目录/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
目录中,并且如果复制了新的比特币节点,则它的数据目录应该已经与主机中的文件同步。
主要思想是,无论出于何种原因,只要销毁节点并重新创建节点,就避免重新下载区块链。不仅能够复制所需的节点,而且不必为每个节点下载区块链。
关于我可能做错了什么的任何想法? 谢谢!
答案 0 :(得分:1)
有多种方法可以实现您的目标,尤其是在蜂群环境中。 首先,假设docker不会在群集之间同步卷,除非您使用合适的驱动程序。 因此,根据您需要读/写还是只读,您必须使用驱动程序或其他解决方案!
以下是一些想法(不是所有解决方案!):
希望这会有所帮助!