Container Upgrade
Upgrade RustFS containers started with Docker, Podman, or Docker Compose while preserving persistent data.
Upgrade a container deployment by recreating the RustFS container from a newer image. Choose the workflow that matches the original installation method: a container started directly with Docker or Podman, or a service managed by Docker Compose.
Before you upgrade
Read the target release notes and use an explicit image tag for the upgrade. Record the current image and retain the original docker run, podman run, or Compose configuration because recreating a container does not copy its runtime options automatically.
Confirm that RustFS is healthy before replacing it:
curl -fsS http://localhost:9000/health/readyPreserve persistent storage
Do not remove the named volume or host directory mounted at /data. Commands such as docker compose down -v, docker volume rm, and podman volume rm delete persistent storage and are not part of an upgrade.
Upgrade a Docker container
The following workflow matches the container name and named volume used in the Docker installation guide. If your deployment uses different ports, environment variables, mounts, or startup arguments, keep those settings unchanged in the replacement command.
Record the current image, then pull the target version:
docker inspect --format '{{.Config.Image}}' rustfs
docker pull rustfs/rustfs:<target-version>Stop and remove only the container. The rustfs-data volume remains intact:
docker stop rustfs
docker rm rustfsRecreate the container with the original configuration and the target image:
docker run -d \
--name rustfs \
--restart unless-stopped \
-p 9000:9000 \
-p 9001:9001 \
-v rustfs-data:/data \
-e RUSTFS_ACCESS_KEY="<your-access-key>" \
-e RUSTFS_SECRET_KEY="<your-secret-key>" \
-e RUSTFS_CONSOLE_ENABLE=true \
rustfs/rustfs:<target-version> \
/dataWait for the replacement container to become healthy:
docker ps --filter name=rustfs
docker logs rustfs
curl -fsS http://localhost:9000/health/readyUpgrade a Podman container
The Podman workflow is the same replacement operation, using the image name from the Podman installation guide.
podman inspect --format '{{.Config.Image}}' rustfs
podman pull docker.io/rustfs/rustfs:<target-version>
podman stop rustfs
podman rm rustfsRecreate the container with the original configuration and persistent volume:
podman run -d \
--name rustfs \
-p 9000:9000 \
-p 9001:9001 \
-v rustfs-data:/data \
-e RUSTFS_ACCESS_KEY="<your-access-key>" \
-e RUSTFS_SECRET_KEY="<your-secret-key>" \
-e RUSTFS_CONSOLE_ENABLE=true \
docker.io/rustfs/rustfs:<target-version> \
/dataVerify the replacement before continuing:
podman ps --filter name=rustfs
podman logs rustfs
curl -fsS http://localhost:9000/health/readyUpgrade with Docker Compose
Run Compose commands from the directory containing the deployment's docker-compose.yml. Before the upgrade, save the fully resolved configuration and confirm the current image:
docker compose config > docker-compose.resolved.yaml
docker compose images rustfsChange the rustfs service to an explicit target image tag while leaving its volumes, environment, ports, and command unchanged:
services:
rustfs:
image: rustfs/rustfs:<target-version>Validate the file, pull the target image, and recreate only the RustFS service. --no-deps leaves optional observability services running:
docker compose config --quiet
docker compose pull rustfs
docker compose up -d --no-deps rustfsCheck the service and the RustFS readiness endpoint:
docker compose ps rustfs
docker compose logs --tail=100 rustfs
curl -fsS http://localhost:9000/health/readyIf you started RustFS together with the observability profile, the RustFS service still upgrades with the same commands. Upgrade observability images separately according to each component's release notes.
Upgrade a multi-node deployment
Replace one RustFS node at a time. Wait for the upgraded node's readiness endpoint to succeed and confirm cluster status before proceeding to the next node. Do not recreate all nodes simultaneously.
Use the same Docker, Podman, or Compose workflow on each node, preserving that node's existing mounts and configuration.
Roll back
For Docker or Podman, stop and remove the failed replacement container, then repeat the corresponding run command with the previously recorded image tag. Keep the same persistent volume and runtime configuration.
For Docker Compose, restore the previous image value in docker-compose.yml, then recreate the RustFS service:
docker compose pull rustfs
docker compose up -d --no-deps rustfs
curl -fsS http://localhost:9000/health/readyIn a multi-node deployment, roll back one node at a time and wait for readiness before continuing.
Next steps
Review Status Check for additional post-upgrade validation.