Docker

docker/Dockerfile builds a small, static (CGO_ENABLED=0), non-root image. docker/docker-compose.yaml is a runnable example showing:

  • mounting host-backed volumes as bucket storage
  • configuring buckets (and everything else) purely through MINIS3_* environment variables, with an otherwise-empty config file
cd docker
mkdir -p certs
openssl req -x509 -newkey rsa:2048 -keyout certs/key.pem -out certs/cert.pem \
  -days 365 -nodes -subj "/CN=localhost"
docker compose up --build

Then, from the host:

aws --endpoint-url https://localhost:8443 --no-verify-ssl s3api list-buckets \
  --profile minis3  # configured with the AKIAPHOTOSEXAMPLE01 credential above

Non-root and privileged ports

The image runs as a non-root user (gcr.io/distroless/static-debian12:nonroot), so it cannot bind ports below 1024 — including the spec's default of 443. Configure network.listen (or MINIS3_NETWORK_LISTEN_0) to a high port (the example uses :8443) and map it to whatever host port you want with Docker's port publishing.

Building the image standalone

docker build -f docker/Dockerfile -t minis3 .