# SeaweedFS

Distributed file store with S3, WebDAV and filer interfaces.

- Replaces: [Amazon S3](https://openlogs.fyi/alternatives/amazon-s3)
- Summary: Paid object storage services, such as Amazon S3.
- Stack: Go (language)
- Deployment: docker_compose
- License: Apache-2.0 (osi) [source](https://github.com/seaweedfs/seaweedfs/blob/82f0a825641e20948868ae01f9fd3325ff0424ac/LICENSE)
- Business model: unknown. The README at the pinned commit does not state a business model, so it stays unknown. ([source](https://github.com/seaweedfs/seaweedfs/blob/82f0a825641e20948868ae01f9fd3325ff0424ac/README.md), read 2026-10-22)
- Difficulty: medium. 6 services, 1 volume mount, no env values to set, no elevated host access. Heuristic score 3 of 11: medium.
- Requirements: not stated
- Repository: [seaweedfs/seaweedfs](https://github.com/seaweedfs/seaweedfs)

## Install

1. Docker with the Compose plugin ([source](https://github.com/seaweedfs/seaweedfs/blob/82f0a825641e20948868ae01f9fd3325ff0424ac/docker/seaweedfs-compose.yml))

   ```text
   A host with Docker and the Docker Compose plugin. This entry runs from a compose file.
   ```

2. Save the compose file as compose.yaml ([source](https://github.com/seaweedfs/seaweedfs/blob/82f0a825641e20948868ae01f9fd3325ff0424ac/docker/seaweedfs-compose.yml))

   ```yaml
   version: '3.9'
   
   services:
     master:
       image: chrislusf/seaweedfs # use a remote image
       ports:
         - 9333:9333
         - 19333:19333
         - 9324:9324
       command: 'master -ip=master -ip.bind=0.0.0.0 -metricsPort=9324'
     volume:
       image: chrislusf/seaweedfs # use a remote image
       ports:
         - 8080:8080
         - 18080:18080
         - 9325:9325
       command: 'volume -ip=volume -master="master:9333" -ip.bind=0.0.0.0 -port=8080 -metricsPort=9325'
       depends_on:
         - master
     filer:
       image: chrislusf/seaweedfs # use a remote image
       ports:
         - 8888:8888
         - 18888:18888
         - 9326:9326
       command: 'filer -ip=filer -master="master:9333" -ip.bind=0.0.0.0 -metricsPort=9326'
       tty: true
       stdin_open: true
       depends_on:
         - master
         - volume
     s3:
       image: chrislusf/seaweedfs # use a remote image
       ports:
         - 8333:8333
         - 9327:9327
       command: 's3 -filer="filer:8888" -ip.bind=0.0.0.0 -metricsPort=9327'
       depends_on:
         - master
         - volume
         - filer
     webdav:
       image: chrislusf/seaweedfs # use a remote image
       ports:
         - 7333:7333
       command: 'webdav -filer="filer:8888"'
       depends_on:
         - master
         - volume
         - filer
     prometheus:
       image: prom/prometheus:v2.21.0
       ports:
         - 9000:9090
       volumes:
         - ./prometheus:/etc/prometheus
       command: '--web.enable-lifecycle --config.file=/etc/prometheus/prometheus.yml'
       depends_on:
         - s3
   ```

3. Start it ([source](https://github.com/seaweedfs/seaweedfs/blob/82f0a825641e20948868ae01f9fd3325ff0424ac/docker/seaweedfs-compose.yml))

   ```bash
   docker compose up -d
   ```

4. Open the app ([source](https://github.com/seaweedfs/seaweedfs/blob/82f0a825641e20948868ae01f9fd3325ff0424ac/docker/seaweedfs-compose.yml))

   ```text
   Open http://localhost:8888. The compose file publishes host port 8888 for the filer service.
   ```

Compose file check: config_ok on 2026-10-22.

## Gotchas and maintenance

### Gotchas

- Some images use the latest tag or no tag: Images without a pinned version: master: chrislusf/seaweedfs (no tag), volume: chrislusf/seaweedfs (no tag), filer: chrislusf/seaweedfs (no tag), s3: chrislusf/seaweedfs (no tag), webdav: chrislusf/seaweedfs (no tag). A later pull can get a different version. ([source](https://github.com/seaweedfs/seaweedfs/blob/82f0a825641e20948868ae01f9fd3325ff0424ac/docker/seaweedfs-compose.yml), checked 2026-10-22)
- The compose file publishes host ports: Host ports: 9333 (master), 19333 (master), 9324 (master), 8080 (volume), 18080 (volume), 9325 (volume), 8888 (filer), 18888 (filer) and 5 more. A port without a host address listens on all host network interfaces. ([source](https://github.com/seaweedfs/seaweedfs/blob/82f0a825641e20948868ae01f9fd3325ff0424ac/docker/seaweedfs-compose.yml), checked 2026-10-22)
- The compose file mounts host folders: Host paths mounted into containers: ./prometheus at /etc/prometheus (prometheus). ([source](https://github.com/seaweedfs/seaweedfs/blob/82f0a825641e20948868ae01f9fd3325ff0424ac/docker/seaweedfs-compose.yml), checked 2026-10-22)

### Signals

Computed from a GitHub snapshot taken 2026-10-22.

- Open issues and pull requests: 729
- Stars: 35668, forks: 3085
- Last push: 2026-10-22 (0 days ago)
- Latest release: 4.48 on 2026-09-28 (23 days ago)

## Sources

- [Repository: https://github.com/seaweedfs/seaweedfs](https://github.com/seaweedfs/seaweedfs)
- [License: https://github.com/seaweedfs/seaweedfs/blob/82f0a825641e20948868ae01f9fd3325ff0424ac/LICENSE](https://github.com/seaweedfs/seaweedfs/blob/82f0a825641e20948868ae01f9fd3325ff0424ac/LICENSE)
- [Business model: https://github.com/seaweedfs/seaweedfs/blob/82f0a825641e20948868ae01f9fd3325ff0424ac/README.md](https://github.com/seaweedfs/seaweedfs/blob/82f0a825641e20948868ae01f9fd3325ff0424ac/README.md)
- [Compose file: https://github.com/seaweedfs/seaweedfs/blob/82f0a825641e20948868ae01f9fd3325ff0424ac/docker/seaweedfs-compose.yml](https://github.com/seaweedfs/seaweedfs/blob/82f0a825641e20948868ae01f9fd3325ff0424ac/docker/seaweedfs-compose.yml)

---
Canonical: https://openlogs.fyi/tools/seaweedfs  
Last updated: 2026-10-22
