You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Docker Swarm中使用命名卷挂载Digital Ocean存储的问题咨询

问题定位与修复方案

我一眼就看到了你的docker-stack.yml里命名卷配置的问题——这也是bind挂载常见的小疏漏,直接导致双向同步失效。

核心错误点

blockchain卷的driver_opts里,device字段多了一个前置的冒号:

# 错误写法
device: :/mnt/blockchain-data

当使用local驱动的bind类型挂载时,device直接填写主机的绝对路径即可,不需要额外的冒号(冒号是用于远程挂载或其他特殊挂载场景的语法)。

修正后的完整卷配置

blockchain卷的配置改成这样,同时推荐显式添加绑定选项确保双向同步:

volumes:
  blockchain:
    driver: local
    driver_opts:
      type: bind
      device: /mnt/blockchain-data
      o: bind # 明确指定双向绑定模式,避免歧义

额外关键注意事项

  • 目录权限检查:确保manager节点上的/mnt/blockchain-data目录权限适配容器内的bcoin运行用户。可以先临时启动容器查看用户UID:
    docker run --rm hollarves/bcoin-mueve id
    
    再调整主机目录权限(假设容器内用户UID为1000):
    sudo chown -R 1000:1000 /mnt/blockchain-data
    
  • 验证双向同步:修复后重新部署栈,然后做简单测试:
    # 重新部署
    docker stack deploy -c docker-stack.yml bcoin-stack
    # 进入容器创建测试文件
    docker exec -it $(docker ps -q -f name=bcoin) touch /data/test-from-container.txt
    
    去主机/mnt/blockchain-data目录查看是否同步生成了文件;反之在主机目录创建文件,检查容器内/data目录是否同步,确认双向读写生效。
  • 配置文件路径校验:你的配置里用${PWD}/bitcoin/secrets/挂载了bcoin的配置文件,要确保部署栈时,当前工作目录下的这个路径在manager节点上确实存在,否则会导致容器启动失败。

这样修改后,容器的/data目录就会和主机的/mnt/blockchain-data实现完全双向同步,既能保存区块链数据避免重建容器时重新下载,也能支持批量复制节点直接复用已有数据。

内容的提问来源于stack exchange,提问作者Henry Ollarves

火山引擎 最新活动