docker-composeでMinio起動時にデフォルトのbucketを作成する

MySQLとかPostgresみたいに環境変数経由でデフォルトのbucketが作れれば楽なんですが、Minioは現状そうなってないので、docker-compose.ymlだけでデフォルトのbucketを作成する方法のメモです。

  • アクセスキー: AKIA_MINIO_ACCESS_KEY
  • シークレットキー: minio_secret_key
  • バケット名: mybucket
  • (リージョン): us-east-1
docker-compose.yml
version: '3'

services:
  minio:
    image: minio/minio:latest
    ports:
      - 19000:9000
    volumes:
      - ./data/minio/data:/export
      - ./data/minio/config:/root/.minio
    environment:
      MINIO_ACCESS_KEY: AKIA_MINIO_ACCESS_KEY
      MINIO_SECRET_KEY: minio_secret_key
    command: server /export 
  createbuckets:
    image: minio/mc
    depends_on:
      - minio
    entrypoint: >
      /bin/sh -c "
      until (/usr/bin/mc config host add myminio http://minio:9000 AKIA_MINIO_ACCESS_KEY minio_secret_key) do echo '...waiting...' && sleep 1; done;
      /usr/bin/mc mb myminio/mybucket;
      /usr/bin/mc policy download myminio/mybucket;
      exit 0;
      "

docker-compose upで起動。

% docker-compose up
Creating network "minio_default" with the default driver
Creating minio_minio_1 ... done
Creating minio_createbuckets_1 ... done
Attaching to minio_minio_1, minio_createbuckets_1
minio_1          |
minio_1          |  You are running an older version of Minio released 1 month ago
minio_1          |  Update: docker pull minio/minio:RELEASE.2018-05-04T23-13-12Z
minio_1          |
minio_1          |
createbuckets_1  | Added `myminio` successfully.
createbuckets_1  | mc: <ERROR> Unable to make bucket `myminio/mybucket`. Your previous request to create the named bucket succeeded and you already own it.
minio_1          | Drive Capacity: 18 GiB Free, 224 GiB Total
minio_1          |
minio_1          | Endpoint:  http://172.26.0.2:9000  http://127.0.0.1:9000
minio_1          | AccessKey: AKIA_MINIO_ACCESS_KEY
minio_1          | SecretKey: minio_secret_key
minio_1          |
minio_1          | Browser Access:
minio_1          |    http://172.26.0.2:9000  http://127.0.0.1:9000
minio_1          |
minio_1          | Command-line Access: https://docs.minio.io/docs/minio-client-quickstart-guide
minio_1          |    $ mc config host add myminio http://172.26.0.2:9000 AKIA_MINIO_ACCESS_KEY minio_secret_key
minio_1          |
minio_1          | Object API (Amazon S3 compatible):
minio_1          |    Go:         https://docs.minio.io/docs/golang-client-quickstart-guide
minio_1          |    Java:       https://docs.minio.io/docs/java-client-quickstart-guide
minio_1          |    Python:     https://docs.minio.io/docs/python-client-quickstart-guide
minio_1          |    JavaScript: https://docs.minio.io/docs/javascript-client-quickstart-guide
minio_1          |    .NET:       https://docs.minio.io/docs/dotnet-client-quickstart-guide
createbuckets_1  | Access permission for `myminio/mybucket` is set to `download`
minio_createbuckets_1 exited with code 0

http://localhost:19000/ にアクセスし、アクセスキー&シークレットキーでログイン、mybucketが表示されれば成功です。

ポイントは以下の2点。

  • minio/minioイメージの中にはmcコマンドが入っていないので、minio/mcイメージを別コンテナで起動してmc mbコマンドでバケットを作成
  • minio本体が起動する前にmcコマンドが走ってしまい失敗することがあるので、until & sleepで起動を待つ

他にも以下のようにminio(-server)単体でmkdirでディレクトリを作り、policy.jsonを置く方法もあります。カスタムしたpolicy.jsonを使いたい場合はこっちの方が楽かもしれません。

docker-compose.yml
    minio:
      image: minio/minio:latest
        (略)
      entrypoint: sh
      command: -c "
        mkdir -p /data/mybucket;
        mkdir -p /data/.minio.sys/buckets/mybucket;
        cp /policy.json /data/.minio.sys/buckets/mybucket/policy.json;
        /usr/bin/minio server /export;
       "
      volumes:
         - ./data/minio/data:/export
         - ./data/minio/config:/root/.minio
         - ./config/policy.json:/policy.json

参考: Create default buckets via environment variables in docker · Issue #4769 · minio/minio

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.