In Docker Compose, MinIO’s arguments go in command: server /data --console-address :9001. /data has to be the path the volume is mounted at, and --console-address fixes the web console’s port: without it MinIO picks a random one at startup and prints it in the log. The S3 API stays on 9000.
The docker run command, converted
The container quickstart from MinIO’s documentation:
docker run \
-p 9000:9000 \
-p 9001:9001 \
--name minio \
-v ~/minio/data:/data \
-e "MINIO_ROOT_USER=ROOTNAME" \
-e "MINIO_ROOT_PASSWORD=CHANGEME123" \
quay.io/minio/minio server /data --console-address ":9001"
services:
minio:
image: quay.io/minio/minio
command: server /data --console-address :9001
ports:
- "9000:9000"
- "9001:9001"
volumes:
- ~/minio/data:/data
environment:
MINIO_ROOT_USER: ROOTNAME
MINIO_ROOT_PASSWORD: CHANGEME123
The shell removed the quotes, so they’re gone from the file. Compose expands ~ to the home directory of whoever runs it.
The image is gone
As of October 2026, neither quay.io/minio/minio nor minio/minio can be pulled: both registries refuse the request. MinIO’s GitHub repository is archived, its README says the community edition is distributed as source code only, and dl.min.io answers 410 for the old binaries. The newest release, RELEASE.2025-10-15T17-29-55Z, has no binaries; RELEASE.2025-09-07T16-13-09Z still has them on GitHub, without the fixes that came after. MinIO’s maintained product, AIStor, needs a license file. To keep running the community server, build the image yourself:
# minio/Dockerfile
FROM alpine:3.22
ARG TARGETARCH
ARG RELEASE=RELEASE.2025-09-07T16-13-09Z
ADD https://github.com/minio/minio/releases/download/${RELEASE}/minio.linux-${TARGETARCH}.${RELEASE} /usr/bin/minio
RUN apk add --no-cache curl && chmod +x /usr/bin/minio
EXPOSE 9000 9001
ENTRYPOINT ["/usr/bin/minio"]
services:
minio:
build: ./minio
image: minio-local:RELEASE.2025-09-07T16-13-09Z
command: server /data --console-address :9001
ports:
- "127.0.0.1:9000:9000"
- "127.0.0.1:9001:9001"
volumes:
- minio-data:/data
environment:
MINIO_ROOT_USER: ROOTNAME
MINIO_ROOT_PASSWORD: CHANGEME123
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 10s
timeout: 5s
retries: 5
app:
image: example/app:1.0
environment:
S3_ENDPOINT: http://minio:9000
depends_on:
minio:
condition: service_healthy
volumes:
minio-data:
docker compose up -d --build builds it once and tags it with the image: name. /minio/health/live is the liveness probe MinIO documents, and it needs no credentials. The published images shipped curl and mc; a home-built one only has what its Dockerfile adds.
Gotchas
MINIO_ROOT_USERneeds at least 3 characters andMINIO_ROOT_PASSWORDat least 8, or the server stops withPlease provide correct credentials. Without either, the root login isminioadmin/minioadmin.- Apps use the API at
http://minio:9000; 9001 is only the console. docker compose down -vdeletesminio-data, buckets included. The bind mount in the converted file is left alone.