Skip to content
Search

RustFS

lastmod 2026-08-19created 2026-03-126 edits

🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting migration and coexistence with other S3-compatible platforms such as MinIO and Ceph.

Installing RustFS with Docker

RustFS is a high-performance, 100% S3-compatible open-source distributed object storage system.

In Single Node Single Disk (SNSD) deployment mode, the backend uses zero erasure coding with no additional data redundancy, making it suitable for local testing and small-scale scenarios.

This page explains how, based on the official RustFS Linux binary package, to package RustFS and its runtime environment into a container with a custom Dockerfile, and to configure data volumes and environment variables for one-click service startup.

Prerequisites

  1. Host requirements
    • Docker is installed (20.10 or later) and can download images and run containers normally.
    • /mnt/rustfs/data local path for mounting object data (or a custom path)
  2. Network and firewall
  • Make sure host port 9000 is open for external access (or that it matches your custom port).
  1. Prepare the configuration file
    • Define the listening port, administrator account, data path, etc. on the host: /etc/rustfs/config.toml
  2. The RustFS container runs as the non-root rustfs user ID (10001). If you run Docker and mount a host directory into the Docker container with -v, make sure the owner of the host directory has been changed to 10001. Otherwise, a permission denied error will occur.

Full parameter configuration example

docker run -d \
  --name rustfs_container \
  -p 9000:9000 \
  -p 9001:9001 \
  -v /mnt/rustfs/data:/data \
  -e RUSTFS_ACCESS_KEY=rustfsadmin \
  -e RUSTFS_SECRET_KEY=rustfsadmin \
  -e RUSTFS_CONSOLE_ENABLE=true \
  -e RUSTFS_SERVER_DOMAINS=example.com \
  rustfs/rustfs:latest \
  --address :9000 \
  --console-enable \
  --server-domains example.com \
  --access-key rustfsadmin \
  --secret-key rustfsadmin \
  /data

Blocking access to /health when using Caddy

Apply the Caddyfile as follows:

rustfs.you.domain.com {
    @health path /health
    respond @health 404
    reverse_proxy 127.0.0.1:9000
}

How to create buckets in docker compose

docker compose run --rm --entrypoint sh createbucket -c "
  aws --endpoint-url http://rustfs:9000 s3 mb s3://datasets;
  aws --endpoint-url http://rustfs:9000 s3 mb s3://registry"

Troubleshooting

RequestTimeTooSkewed

{"ok":false,"code":"INVALID_CREDENTIALS","message":"S3 list failed: 403 <?xml version=\"1.0\" encoding=\"UTF-8\"?><Error><Code>RequestTimeTooSkewed</Code><Message>request time is too far from server time</Message></Error>"}

This is not a credentials problem but a clock problem.

<Code>RequestTimeTooSkewed</Code><Message>request time is too far from server time</Message>

SigV4 rejects a request with 403 if the difference between the X-Amz-Date in the signature and the server time exceeds ±15 minutes. In other words, just make the current time correct everywhere.

List of Object Storage Softwares

Favorite site

author Zer0 sitemap