💨

docker composeを用いてminioサーバーを構築する方法

2022/10/08に公開

目的

  • docker composeを使ってminioサーバーを構築する方法を記述する
  • ネット上にある方法だとエラーが出る人を助ける

対象読者

  • docker composeでminioサーバーを構築する方法を探している人
  • docker composeでminioサーバーを構築しようとしてエラーが出た人
  • docker composeで立ち上げたminioサーバーにアクセスしようとすると、以下のエラーが出る人
mc: <ERROR> Unable to initialize new alias from the provided credentials. The Access Key Id you provided does not exist in our records.

記事執筆背景

まず、S3互換性のあるObject Storageをローカルで立ち上げて、いい感じの開発環境を整えたかったので、minioをdocker composeにServiceとして追加しようと思った。
また、立ち上げたサーバーにバケットを作成するためのService(init-minioと命名)を追加したかった。
要するにここで紹介されていることをしたかった。
だが、上述したエラーが出てしまい、先に進められなかった。
今回、このエラーを解決したので、情報をまとめておけば、誰かの役に立つかもしれないと思ったので、記事を書いている。

結論

以下のdocker-compose.ymlでやりたいことができる(部分的に抜粋)。

  minio:
    image: quay.io/minio/minio:latest
    environment:
      MINIO_ROOT_USER: root
      MINIO_ROOT_PASSWORD: password
    command: server /data --console-address ":9001"
    ports:
      - "9000:9000"
      - "9001:9001"
    volumes:
      - ./minio/data:/data

  init-minio:
    image: minio/mc:latest
    depends_on:
      - minio
    entrypoint: >
      /bin/sh -c "/usr/bin/mc alias set myminio http://minio:9000 root password; /usr/bin/mc rm -r --force myminio/recilabo-local; /usr/bin/mc mb myminio/recilabo-local; exit 0;"

補足

元々書いていたdocker-compose.ymlは以下のものだった。
上記のやつとの違いはminio.environment.MINIO_ACCESS_KEY/MINIO_SECRET_KEYがあること。
当初私は「MINIO_ROOT_USERとPASSWORDはコンソールにログインするために必要で、MINIO_ACCESS_KEYとSECRET_KEYはcliでアクセスしたりプログラムでアクセスする時に必要なのか?」とか思っていたが、そうではなかった。

ソースコードを読んだわけではないので、正しくない可能性が高いが、どうもMINIO_ROOT_USERとMINIO_ROOT_PASSWORDが優先されるようだ。

これら2つを同時に設定している人は注意したほうが良いかもしれない。

  minio:
    image: quay.io/minio/minio:latest
    environment:
      MINIO_ROOT_USER: root
      MINIO_ROOT_PASSWORD: password
      MINIO_ACCESS_KEY: access_key
      MINIO_SECRET_KEY: secret_key
    command: server /data --console-address ":9001"
    ports:
      - "9000:9000"
      - "9001:9001"
    volumes:
      - ./minio/data:/data

  init-minio:
    image: minio/mc:latest
    depends_on:
      - minio
    entrypoint: >
      /bin/sh -c "/usr/bin/mc alias set myminio http://minio:9000 access_key secret_key; /usr/bin/mc rm -r --force myminio/recilabo-local; /usr/bin/mc mb myminio/recilabo-local; exit 0;"
$ make init-minio 
docker compose up init-minio
mc: <ERROR> Unable to initialize new alias from the provided credentials. The Access Key Id you provided does not exist in our records.
mc: <ERROR> Failed to remove `myminio/recilabo-local` recursively. Requested file `/myminio/recilabo-local` not found
Bucket created successfully `myminio/recilabo-local`.
exited with code 0

Discussion