
gasparekatapy/seaweedfs本镜像基于SeaweedFS构建,专为Swarm环境设计,提供节点自动检测功能,支持分布式主节点(master)和文件服务器(filer)部署。通过环境变量和命令参数配置,可实现IP自动发现、集群节点管理、日志清理及云存储双向同步等功能,适用于构建高可用的分布式存储集群。
节点检测与IP管理:通过-peers=SERVICE_NAME:PORT参数从服务名获取IP,无节点时使用-ip=SERVICE_NAME作为fallback;支持通过环境变量(如DETECT_MASTERS、DETECT_PEERS)自动扩展主节点/节点列表,绕过DNS解析。
集群高可用:支持全局文件服务器和主节点,启动时自动检测并移除不可达主节点,维持raft quorum(3.2.7+);通过USE_DISCOVER和hostname: "master_{{.Task.Slot}}"配置,使用容器主机名重建连接,解决IP变更导致的raft集群问题(3.1.0+)。
日志与存储管理:提供clean_log脚本(3.4.3+),结合Swarm定时任务清理日志,仅保留WEED_KEEP_DAYS天的日志;remotesync.sh工具(3.5.0+)支持云存储双向同步,需配合config.conf配置挂载目录。
网络优化:支持PUBLIC_URL作为IP检测fallback(2.7.4+),解决容器内访问公网IP的"host unreachable"问题;支持卷服务器publicUrl配置(2.3.0+),结合Swarm模板{{.Node.Hostname}}实现跨节点访问。
兼容性:与SeaweedFS卷插件(gasparekatapy/seaweedfs_plugin)兼容;2.0.0+版本基于自定义源码构建,修复小文件(<512 Bytes)WebDAV无MIME类型错误,不含supercronic。
| 环境变量 | 说明 | 默认值 | 适用版本 |
|---|---|---|---|
DETECT_MASTERS | 是否扩展-master或-mserver为内部IP列表 | false | 3.0.0+ |
DETECT_PEERS | 是否从-ip=SERVICE_NAME:PORT获取当前容器IP,绕过服务VIP | true | 2.4.1+ |
USE_DISCOVER | 结合容器主机名(如master_{{.Task.Slot}})重建-ip和-peers参数 | false | 3.1.0+ |
USE_HOSTNAME | 将-ip参数设为本地主机名,适用于文件服务器 | false | 3.1.2+ |
CLUSTER_SIZE | 集群节点数量,用于节点发现 | - | 3.1.0+ |
PUBLIC_URL | IP检测失败时的fallback,格式为主机名:端口 | - | 2.6.1+ |
WEED_KEEP_DAYS | clean_log脚本保留日志的天数 | 2 | 3.4.3+ |
WEED_SYNC_TYPE | remotesync.sh同步类型,remote(远程到本地)或local(本地到远程) | - | 3.5.0+ |
WEED_MASTER | 主节点地址,供clean_log和remotesync.sh使用 | - | 3.4.3+、3.5.0+ |
WEED_FILER | 文件服务器地址,供clean_log和remotesync.sh使用 | - | 3.4.3+、3.5.0+ |
yamlversion: '3.9' services: master: image: gasparekatapy/seaweedfs environment: DETECT_MASTERS: "false" DETECT_PEERS: "true" USE_DISCOVER: "true" USE_HOSTNAME: "false" CLUSTER_SIZE: 3 networks: - net hostname: "master_{{.Task.Slot}}" command: - 'master' - '-ip=master' - '-ip.bind=0.0.0.0' - '-port=9333' - '-port.grpc=***' - '-peers=master:9333' - '-resumeState=true' - '-raftHashicorp=true' - '-raftBootstrap=false' deploy: mode: global placement: constraints: - node.role == manager update_config: parallelism: 1 failure_action: rollback order: stop-first filer: image: gasparekatapy/seaweedfs environment: DETECT_MASTERS: "true" DETECT_PEERS: "false" USE_DISCOVER: "true" USE_HOSTNAME: "true" CLUSTER_SIZE: 3 ports: - "8888:8888" - "***:***" networks: - net hostname: "filer_{{.Task.Slot}}" command: - 'filer' - '-ip=filer' - '-ip.bind=0.0.0.0' - '-port=8888' - '-port.grpc=***' - '-port.readonly=28888' - '-master=master:9333' deploy: mode: replicated replicas: 3 placement: max_replicas_per_node: 1 update_config: parallelism: 1 failure_action: rollback order: stop-first volume: image: gasparekatapy/seaweedfs environment: DETECT_MASTERS: "true" DETECT_PEERS: "false" USE_DISCOVER: "true" USE_HOSTNAME: "true" CLUSTER_SIZE: 3 PUBLIC_URL: "{{.Node.Hostname}}:8080" ports: - target: 8080 published: 8080 protocol: tcp mode: host - target: *** published: *** protocol: tcp mode: host hostname: "volume_{{.Task.Slot}}" networks: - net command: - 'volume' - '-ip=volume' - '-ip.bind=0.0.0.0' - '-port=8080' - '-port.grpc=***' - '-mserver=master:9333' deploy: mode: global update_config: parallelism: 1 failure_action: rollback order: stop-first clean_log: image: gasparekatapy/seaweedfs environment: WEED_MASTER: "master:9333" WEED_FILER: "filer:8888" WEED_KEEP_DAYS: 2 networks: - net entrypoint: ["/clean_log.sh"] deploy: mode: replicated replicas: 0 restart_policy: condition: none labels: # Swarm定时任务配置 - swarm.cronjob.enable=true - swarm.cronjob.schedule=0 0 */3 * * - swarm.cronjob.skip-running=true remote2local: image: gasparekatapy/seaweedfs environment: WEED_SYNC_TYPE: "remote" WEED_MASTER: "master:9333" WEED_FILER: "filer:8888" volumes: - /path/to/config.conf:/config.conf # 挂载同步配置文件 networks: - net entrypoint: ["/remotesync.sh", "/config.conf"] deploy: mode: replicated replicas: 0 restart_policy: condition: none labels: # Swarm定时任务配置 - swarm.cronjob.enable=true - swarm.cronjob.schedule=0 * * * * - swarm.cronjob.skip-running=true local2remote: image: gasparekatapy/seaweedfs environment: WEED_SYNC_TYPE: "local" WEED_MASTER: "master:9333" WEED_FILER: "filer:8888" volumes: - /path/to/config.conf:/config.conf # 挂载同步配置文件 networks: - net entrypoint: ["/remotesync.sh", "/config.conf"] deploy: mode: replicated replicas: 1 placement: max_replicas_per_node: 1 preferences: - spread: node.labels.datacenter networks: net:
-peers=master:9333指定节点,结合USE_DISCOVER和主机名模板实现节点自动发现。USE_HOSTNAME=true使用主机名作为IP,DETECT_MASTERS=true自动扩展主节点列表。PUBLIC_URL配置节点访问地址,支持跨节点访问。config.conf配置同步目录,支持本地与云存储双向同步。swarm.cronjob.*)实现定时任务。gasparekatapy/seaweedfs_plugin卷插件兼容,可提升存储性能。master、filer)需与Docker网络中的服务发现名称一致,确保IP解析正常。


manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务