神戸学院大学 経営学部 林坂ゼミ

Docker 入門トップページ

« 戻る 次へ »

Docker 入門

Elasticsearch で全文検索を実行する(macOS版)

Elasticsearch のインストール

目次に戻る

インストール

Elasticsearch を macOS(または Linux)にインストールするには Get started with Elasticsearch (https://www.elastic.co/docs/solutions/search/get-started) を参考に,任意のディレクトリに移動して次のコマンドを実行します.

curl -fsSL https://elastic.co/start-local | sh

例えば elasticsearch という新規ディレクトリに移動した後,上のコマンドを実行すると,Elasticsearch が次の表示と共にインストールされます.実行の結果表示から読み取れるように,いくつかの Docker イメージがダウンロードされ,そのイメージからコンテナが起動する様子がうかがえます.また,パスワードやAPIキーはその都度異なる値が設定されて画面にも表示されていることに注意してください.

elasticsearch % curl -fsSL https://elastic.co/start-local | sh ⏎

  ______ _           _   _
 |  ____| |         | | (_)
 | |__  | | __ _ ___| |_ _  ___
 |  __| | |/ _` / __| __| |/ __|
 | |____| | (_| \__ \ |_| | (__
 |______|_|\__,_|___/\__|_|\___|
-------------------------------------------------
🚀 Run Elasticsearch and Kibana for local testing
-------------------------------------------------

ℹ️  Do not use this script in a production environment

⌛️ Setting up Elasticsearch and Kibana v9.2.1-arm64...

- Generated random passwords
- Created the elastic-start-local folder containing the files:
  - .env, with settings
  - docker-compose.yml, for Docker services
  - start/stop/uninstall commands
- Running docker compose up --wait

[+] Running 25/25
 ✔ elasticsearch Pulled                                                                 80.9s
 ✔ kibana_settings Pulled                                                               80.9s
 ✔ kibana Pulled                                                                        90.1s
[+] Running 5/5
 ✔ Volume "elastic-start-local_dev-kibana"         Created                               0.0s
 ✔ Volume "elastic-start-local_dev-elasticsearch"  Created                               0.0s
 ✔ Container es-local-dev                          Healthy                              22.1s
 ✔ Container kibana-local-settings                 Exited                               22.0s
 ✔ Container kibana-local-dev                      Healt...                             44.4s

🎉 Congrats, Elasticsearch and Kibana are installed and running in Docker!

🌐 Open your browser at http://localhost:5601

   Username: elastic
   Password: rs8O0QpW

🔌 Elasticsearch API endpoint: http://localhost:9200
🔑 API key: Q25EX3RKb0I3SzJUQjVKNm8xQXQ6OXcxT3phdlhVV1BIeEhVZXh1clJMZw==

Learn more at https://github.com/elastic/start-local

elasticsearch %

インストールが終われば elastic-start-local という名前のディレクトリが作成されているはずなのでそのディレクトリに移動します.さらに,どのようなファイルが作成されたかを確認しておきます.

elasticsearch % cd elastic-start-local ⏎
elastic-start-local % tree -f -a⏎
.
├── ./.env
├── ./config
│   └── ./config/telemetry.yml
├── ./docker-compose.yml
├── ./start.sh
├── ./stop.sh
└── ./uninstall.sh

2 directories, 6 files
elastic-start-local %

次にダウンロードされた Docker イメージを確認します.

elastic-start-local % docker image ls ⏎
REPOSITORY                                      TAG           IMAGE ID       CREATED       SIZE
docker.elastic.co/elasticsearch/elasticsearch   9.2.1-arm64   541fb6dbb0d5   2 weeks ago   1.01GB
docker.elastic.co/kibana/kibana                 9.2.1-arm64   78bc3ce9b542   2 weeks ago   1.43GB
elastic-start-local %

起動中のコンテナを一覧表示すると,2個のコンテナが起動していることが分かりました.

elastic-start-local % docker container ls ⏎
CONTAINER ID   IMAGE                                                       COMMAND                   CREATED         STATUS                   PORTS                      NAMES
2186e2e22369   docker.elastic.co/kibana/kibana:9.2.1-arm64                 "/bin/tini -- /usr/l…"   3 minutes ago   Up 3 minutes (healthy)   127.0.0.1:5601->5601/tcp   kibana-local-dev
7f540d5f9b09   docker.elastic.co/elasticsearch/elasticsearch:9.2.1-arm64   "/bin/tini -- /usr/l…"   3 minutes ago   Up 3 minutes (healthy)   127.0.0.1:9200->9200/tcp   es-local-dev
elastic-start-local %

システムの消費量を確認しておきます.

elastic-start-local % docker system df ⏎
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          2         2         2.328GB   107.8MB (4%)
Containers      3         2         258.4kB   0B (0%)
Local Volumes   2         2         9.74MB    0B (0%)
Build Cache     0         0         0B        0B
elastic-start-local %

次に,ファイルの内容を確認します.まず,.env ファイルにはインストール時に生成されたパスワードやAPIキーなどの機密情報が記載されていることに注意してください.

.env
START_LOCAL_VERSION=0.12.0
ES_LOCAL_VERSION=9.2.1-arm64
ES_LOCAL_CONTAINER_NAME=es-local-dev
ES_LOCAL_PASSWORD=rs8O0QpW
ES_LOCAL_PORT=9200
ES_LOCAL_URL=http://localhost:${ES_LOCAL_PORT}
ES_LOCAL_DISK_SPACE_REQUIRED=1gb
ES_LOCAL_JAVA_OPTS="-Xms128m -Xmx2g"
KIBANA_LOCAL_CONTAINER_NAME=kibana-local-dev
KIBANA_LOCAL_SETTINGS_CONTAINER_NAME=kibana-local-settings
KIBANA_LOCAL_PORT=5601
KIBANA_LOCAL_PASSWORD=AODa7v3M
KIBANA_ENCRYPTION_KEY=Ew80JRm6PQowvUZHNRjELkX8PLXw96I2
ES_LOCAL_API_KEY=Q25EX3RKb0I3SzJUQjVKNm8xQXQ6OXcxT3phdlhVV1BIeEhVZXh1clJMZw==

したがって,.env ファイルから機密情報を除いた .env.example を作成しておきます.

.env.example
# Copy this file to .env and replace placeholder values with actual secrets.
START_LOCAL_VERSION=0.12.0
ES_LOCAL_VERSION=9.2.1-arm64
ES_LOCAL_CONTAINER_NAME=es-local-dev
ES_LOCAL_PASSWORD=your_password_here
ES_LOCAL_PORT=9200
ES_LOCAL_URL=http://localhost:${ES_LOCAL_PORT}
ES_LOCAL_DISK_SPACE_REQUIRED=1gb
ES_LOCAL_JAVA_OPTS="-Xms128m -Xmx2g"
KIBANA_LOCAL_CONTAINER_NAME=kibana-local-dev
KIBANA_LOCAL_SETTINGS_CONTAINER_NAME=kibana-local-settings
KIBANA_LOCAL_PORT=5601
KIBANA_LOCAL_PASSWORD=your_password_here
KIBANA_ENCRYPTION_KEY=your_encryption_here
ES_LOCAL_API_KEY=your_api_key_here

その上で,.envGit のリポジトリに含まれないように .gitignore に登録しておきます.また macOS では .DS_Store も同時に登録しておくと良いでしょう.

.gitignore
.DS_Store
.env

それでは,Elasticsearch の API エンドポイントにリクエストを送信するコマンドを示します.接続の際にはユーザ名とパスワードの組合せか API キーが必要です.まず,ユーザ名 (elastic) とパスワード (rs8O0QpW) を指定してリクエストを送信するコマンドは次の形式です.ここで -u オプションの後ろに ユーザ名:パスワード の形式で指定します.もちろん,パスワードは実際に設定されたパスワードに変更してください.

curl -u elastic:rs8O0QpW "http://localhost:9200/"

API キーを利用する場合は次のような形式のコマンドを利用します.

curl -H "Authorization: ApiKey Q25EX3RKb0I3SzJUQjVKNm8xQXQ6OXcxT3phdlhVV1BIeEhVZXh1clJMZw==" "http://localhost:9200/"

実際にユーザ名とパスワードを使ってリクエストを送信すると次のような結果が得られました.

elastic-start-local % curl -u elastic:rs8O0QpW "http://localhost:9200/" ⏎
{
  "name" : "7f540d5f9b09",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "__iGUnK-TFq8FlqdBwpWYg",
  "version" : {
    "number" : "9.2.1",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "4ad0ef0e98a2e72fafbd79a19fa5cae2f026117d",
    "build_date" : "2025-11-06T22:07:39.673130621Z",
    "build_snapshot" : false,
    "lucene_version" : "10.3.1",
    "minimum_wire_compatibility_version" : "8.19.0",
    "minimum_index_compatibility_version" : "8.0.0"
  },
  "tagline" : "You Know, for Search"
}
elastic-start-local %

API キーを利用した場合も同じ結果が得られたはずです.

elastic-start-local % curl -H "Authorization: ApiKey Q25EX3RKb0I3SzJUQjVKNm8xQXQ6OXcxT3phdlhVV1BIeEhVZXh1clJMZw==" "http://localhost:9200/" ⏎
{
  "name" : "7f540d5f9b09",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "__iGUnK-TFq8FlqdBwpWYg",
  "version" : {
    "number" : "9.2.1",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "4ad0ef0e98a2e72fafbd79a19fa5cae2f026117d",
    "build_date" : "2025-11-06T22:07:39.673130621Z",
    "build_snapshot" : false,
    "lucene_version" : "10.3.1",
    "minimum_wire_compatibility_version" : "8.19.0",
    "minimum_index_compatibility_version" : "8.0.0"
  },
  "tagline" : "You Know, for Search"
}
elastic-start-local %

なお,Webブラウザで http://localhost:9200/ にアクセスする方法もあります.

docker-2025-elastic-mac01

同じユーザー名とパスワードでログインすると次のような結果が表示されます.

docker-2025-elastic-mac02

インストールと接続確認ができたので早速ドキュメントを登録して検索できるようにしたいのですが,ドキュメントに含まれる日本語文字列はそのままでは検索できません.次の手順に従って kuromoji をインストールすることで日本語文字列も検索できるようにします.

目次に戻る

kuromoji のインストール

次に Elasticsearch で日本語が含まれるドキュメントも検索できるようにするために kuromoji をインストールします.Kuromoji は Java で開発されたオープンソースの日本語形態素解析器です.文章を単語に分割し,品詞のタグ付け,見出し化,漢字の読み方を取得するなどの機能があります.

まず,インストール直後の docker-compose.yml の内容を確認します.次の3行目において Docker のイメージを指定していることに注意してください.なお,${ES_LOCAL_VERSION}.env で指定された ES_LOCAL_VERSION の値を取得することを意味しています.

docker-compose.yml
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:${ES_LOCAL_VERSION}
    container_name: ${ES_LOCAL_CONTAINER_NAME}
    volumes:
      - dev-elasticsearch:/usr/share/elasticsearch/data
    ports:
      - 127.0.0.1:${ES_LOCAL_PORT}:9200
    environment:
      - discovery.type=single-node
      - ELASTIC_PASSWORD=${ES_LOCAL_PASSWORD}
      - xpack.security.enabled=true
      - xpack.security.http.ssl.enabled=false
      - xpack.license.self_generated.type=trial
      - xpack.ml.use_auto_machine_memory_percent=true
      - ES_JAVA_OPTS=${ES_LOCAL_JAVA_OPTS}
      - cluster.routing.allocation.disk.watermark.low=${ES_LOCAL_DISK_SPACE_REQUIRED}
      - cluster.routing.allocation.disk.watermark.high=${ES_LOCAL_DISK_SPACE_REQUIRED}
      - cluster.routing.allocation.disk.watermark.flood_stage=${ES_LOCAL_DISK_SPACE_REQUIRED}
      - "_JAVA_OPTIONS=-XX:UseSVE=0"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "curl --output /dev/null --silent --head --fail -u elastic:${ES_LOCAL_PASSWORD} http://elasticsearch:9200",
        ]
      interval: 10s
      timeout: 10s
      retries: 30

  kibana_settings:
    depends_on:
      elasticsearch:
        condition: service_healthy
    image: docker.elastic.co/elasticsearch/elasticsearch:${ES_LOCAL_VERSION}
    container_name: ${KIBANA_LOCAL_SETTINGS_CONTAINER_NAME}
    restart: 'no'
    command: >
      bash -c '
        echo "Setup the kibana_system password";
        start_time=$$(date +%s);
        timeout=60;
        until curl -s -u "elastic:${ES_LOCAL_PASSWORD}" -X POST http://elasticsearch:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_LOCAL_PASSWORD}\"}" -H "Content-Type: application/json" | grep -q "^{}"; do
          if [ $$(($$(date +%s) - $$start_time)) -ge $$timeout ]; then
            echo "Error: Elasticsearch timeout";
            exit 1;
          fi;
          sleep 2;
        done;
      '

  kibana:
    depends_on:
      kibana_settings:
        condition: service_completed_successfully
    image: docker.elastic.co/kibana/kibana:${ES_LOCAL_VERSION}
    container_name: ${KIBANA_LOCAL_CONTAINER_NAME}
    volumes:
      - dev-kibana:/usr/share/kibana/data
      - ./config/telemetry.yml:/usr/share/kibana/config/telemetry.yml
    ports:
      - 127.0.0.1:${KIBANA_LOCAL_PORT}:5601
    environment:
      - SERVER_NAME=kibana
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - ELASTICSEARCH_USERNAME=kibana_system
      - ELASTICSEARCH_PASSWORD=${KIBANA_LOCAL_PASSWORD}
      - XPACK_ENCRYPTEDSAVEDOBJECTS_ENCRYPTIONKEY=${KIBANA_ENCRYPTION_KEY}
      - ELASTICSEARCH_PUBLICBASEURL=http://localhost:${ES_LOCAL_PORT}
      - XPACK_SPACES_DEFAULTSOLUTION=es
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "curl -s -I http://kibana:5601 | grep -q 'HTTP/1.1 302 Found'",
        ]
      interval: 10s
      timeout: 10s
      retries: 30

volumes:
  dev-elasticsearch:
  dev-kibana:

Elasticsearch の Docker イメージに kuromoji をインストールしたいので,docker-compose.yml を次のように編集します.つまり,elasticsearch/Dockerfile に記載されたとおり Docker イメージをビルドするようにします.このとき,.env から読み取ったバージョン番号に関する値を elasticsearch/Dockerfile に渡すために args を指定します.

docker-compose.yml(抜粋)
services:
  elasticsearch:
    # image: docker.elastic.co/elasticsearch/elasticsearch:${ES_LOCAL_VERSION}
    build:
      context: ./elasticsearch
      args:
        ES_VERSION: ${ES_LOCAL_VERSION} # バージョンを .env から渡す
    container_name: ${ES_LOCAL_CONTAINER_NAME}

    ...(以下略)...

続いて,elasticsearch ディレクトリを作成し,elasticsearch/Dockerfile を次のとおり作成します.


ARG ES_VERSION=9.2.1-arm64

FROM docker.elastic.co/elasticsearch/elasticsearch:${ES_VERSION}

# analysis-kuromoji プラグインのインストール
RUN elasticsearch-plugin install --batch analysis-kuromoji

Elasticsearch のアンインストールスクリプトを実行したときに上で編集した docker-compose.yml などのファイルが削除されないように,uninstall.sh の39行目 (rm docker-compose.yml ... ) をコメントアウトします.

uninstall.sh
echo "All data will be deleted and cannot be recovered."
if ask_confirmation; then
  docker compose rm -fsv
  docker compose down -v
  # rm docker-compose.yml .env uninstall.sh start.sh stop.sh config/telemetry.yml
  if [ -z "$(ls -A config)" ]; then
    rm -d config
  fi

イメージのビルドを始める前に一旦コンテナを停止させた上で破棄しておきます.

elastic-start-local % docker compose down ⏎
[+] Running 4/4
 ✔ Container kibana-local-dev           Removed                                          1.2s
 ✔ Container kibana-local-settings      Removed                                          0.0s
 ✔ Container es-local-dev               Removed                                          2.5s
 ✔ Network elastic-start-local_default  Removed                                          0.2s
elastic-start-local %

カレントディレクトリに docker-compose.yml ファイルが存在する(さらに,elasticsearch ディレクトリに Dockerfile が存在する)ことを確認して次のコマンドでイメージを再ビルドして起動します.

elastic-start-local % ls ⏎
config			elasticsearch		stop.sh
docker-compose.yml	start.sh		uninstall.sh
elastic-start-local % docker compose up -d --build ⏎
[+] Building 6.5s (8/8) FINISHED
 => [internal] load local bake definitions                                               0.0s
 => => reading from stdin 720B                                                           0.0s
 => [internal] load build definition from Dockerfile                                     0.0s
 => => transferring dockerfile: 237B                                                     0.0s
 => WARN: InvalidDefaultArgInFrom: Default value for ARG docker.elastic.co/elasticsearc  0.0s
 => [internal] load metadata for docker.elastic.co/elasticsearch/elasticsearch:9.2.1-ar  0.0s
 => [internal] load .dockerignore                                                        0.0s
 => => transferring context: 2B                                                          0.0s
 => [1/2] FROM docker.elastic.co/elasticsearch/elasticsearch:9.2.1-arm64                 0.0s
 => [2/2] RUN elasticsearch-plugin install --batch analysis-kuromoji                     6.2s
 => exporting to image                                                                   0.0s
 => => exporting layers                                                                  0.0s
 => => writing image sha256:c79ecc87d792c4da5498a8259eed02c2d0d70934951f59a2c060f80ace4  0.0s
 => => naming to docker.io/library/elastic-start-local-elasticsearch                     0.0s
 => resolving provenance for metadata file                                               0.0s
[+] Running 5/5
 ✔ elastic-start-local-elasticsearch    Built                                            0.0s
 ✔ Network elastic-start-local_default  Created                                          0.0s
 ✔ Container es-local-dev               Healthy                                         20.7s
 ✔ Container kibana-local-settings      Exited                                          21.3s
 ✔ Container kibana-local-dev           Started                                         21.4s
elastic-start-local %

イメージのビルドが終わったので,イメージの一覧を確認します.新たなイメージが生成されたことが分かります.

elastic-start-local % docker image ls ⏎
REPOSITORY                                      TAG           IMAGE ID       CREATED         SIZE
elastic-start-local-elasticsearch               latest        c79ecc87d792   2 minutes ago   1.01GB
docker.elastic.co/elasticsearch/elasticsearch   9.2.1-arm64   541fb6dbb0d5   2 weeks ago     1.01GB
docker.elastic.co/kibana/kibana                 9.2.1-arm64   78bc3ce9b542   2 weeks ago     1.43GB
elastic-start-local %

コンテナが起動していることも確認します.

elastic-start-local % docker container ls ⏎
CONTAINER ID   IMAGE                                         COMMAND                   CREATED         STATUS                   PORTS                      NAMES
54207647059f   docker.elastic.co/kibana/kibana:9.2.1-arm64   "/bin/tini -- /usr/l…"   3 minutes ago   Up 2 minutes (healthy)   127.0.0.1:5601->5601/tcp   kibana-local-dev
64da5c780379   elastic-start-local-elasticsearch             "/bin/tini -- /usr/l…"   3 minutes ago   Up 3 minutes (healthy)   127.0.0.1:9200->9200/tcp   es-local-dev
elastic-start-local %

これまでと同様に API キーでアクセスできることを確認します.

elastic-start-local % curl -H "Authorization: ApiKey Q25EX3RKb0I3SzJUQjVKNm8xQXQ6OXcxT3phdlhVV1BIeEhVZXh1clJMZw==" "http://localhost:9200/" ⏎

{
  "name" : "64da5c780379",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "__iGUnK-TFq8FlqdBwpWYg",
  "version" : {
    "number" : "9.2.1",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "4ad0ef0e98a2e72fafbd79a19fa5cae2f026117d",
    "build_date" : "2025-11-06T22:07:39.673130621Z",
    "build_snapshot" : false,
    "lucene_version" : "10.3.1",
    "minimum_wire_compatibility_version" : "8.19.0",
    "minimum_index_compatibility_version" : "8.0.0"
  },
  "tagline" : "You Know, for Search"
}
elastic-start-local %

念のため,コンテナの bash シェルにログインして,kuromoji がインストールできていることを確認しても良いでしょう.

elastic-start-local % docker compose exec elasticsearch /bin/bash ⏎
[elasticsearch@64da5c780379 ~]$ elasticsearch-plugin list ⏎
warning: ignoring _JAVA_OPTIONS=-XX:UseSVE=0; pass JVM parameters via ES_JAVA_OPTS
analysis-kuromoji
[elasticsearch@64da5c780379 ~]$ exit ⏎
exit
elastic-start-local %

はじめて Elasticsearch をインストールした場合はこのページの残りはスキップして次のページに進んでください.

目次に戻る

Git Clone 後のAPIキー生成

GitHub などから git clone コマンドで docker-compose.yml 等の一連のファイルをダウンロードした場合,.env ファイルを準備した後に docker compose up -d --build コマンドを実行すると,イメージのダウンロードやビルド,ユーザの作成など一連の作業が完了します.このとき,.env に記載されたパスワードが設定されます.

elastic-start-local % curl -u elastic:rs8O0QpW "http://localhost:9200/" ⏎
{
  "name" : "7f540d5f9b09",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "__iGUnK-TFq8FlqdBwpWYg",
  "version" : {
    "number" : "9.2.1",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "4ad0ef0e98a2e72fafbd79a19fa5cae2f026117d",
    "build_date" : "2025-11-06T22:07:39.673130621Z",
    "build_snapshot" : false,
    "lucene_version" : "10.3.1",
    "minimum_wire_compatibility_version" : "8.19.0",
    "minimum_index_compatibility_version" : "8.0.0"
  },
  "tagline" : "You Know, for Search"
}
elastic-start-local %

しかしながら,API キーは .env ファイルにあらかじめ設定していてもその値が登録されることはありません.したがって,別のサーバに Elasticsearch を設定したり,同じサーバであっても改めて設定し直したときには,パスワードで接続した上で API キーを新規に発行する手続きが必要になります.

API キーを発行するためのコマンドは次のような感じになります.ここで,パスワードは .env ファイル に記載された ES_LOCAL_PASSWORD の値を指定してください.また,name: の 「my-elastic-key」には任意に適当な名前を付けてください.その他の項目は API キーを用いて利用できる権限を細かく設定しています.例えば「"cluster": ["monitor"]」はクラスタの状態を確認するための権限です.インデックスについては「"names": ["*"]」であることからすべてのインデックスについてそれ以降の権限が付与されます.「"create_index"」「"delete_index"」「"read"」「"write"」の権限を与えることでいわゆる CRUD (Create, Read, Update, Delete) が可能になります.「"view_index_metadata"」によってマッピングの状態を確認できるようになります.「"monitor"」はインデックスの状態確認,「"manage"」はレプリカ数を変更するための権限です.おおよそ次の設定にしておけば,この先利用する作業はすべて実行できるはずです.

curl -u elastic:your_password_here -H "Content-Type: application/json" -X POST "http://localhost:9200/_security/api_key" -d '{
    "name": "my-elastic-key",
    "role_descriptors": {
      "my_role": {
        "cluster": ["monitor"],
        "index": [
          { "names": ["*"],
          "privileges": [
              "create_index",
              "delete_index",
              "read",
              "write",
              "view_index_metadata",
              "monitor",
              "manage"
            ]
          }
        ]
      }
    }
  }'

実際に上のコマンドを実行します(その際はパスワードは書き換えてください).コマンドが成功すれば「encoded」の後に表示された文字列が発行された API キーです.

elastic-start-local % curl -u elastic:rs8O0QpW -H "Content-Type: application/json" -X POST "http://localhost:9200/_security/api_key" -d '{
    "name": "my-elastic-key",
    "role_descriptors": {
      "my_role": {
        "cluster": ["monitor"],
        "index": [
          { "names": ["*"],
          "privileges": [
              "create_index",
              "delete_index",
              "read",
              "write",
              "view_index_metadata",
              "monitor",
              "manage"
            ]
          }
        ]
      }
    }
  }' ⏎
{"id":"rh0bzpoBIADfu4bVVs2u","name":"my-elastic-key","api_key":"D_1CjcKgw_Y5sIrGNlHU4w","encoded":"NlZGY3pwb0IyT1FPR1RNREtrRlc6WG1VUmZnVnYxSmYyMlpFMDQwTHJ6UQ=="}
elastic-start-local %

新たに生成した API キーを利用して接続できたら成功です.

elastic-start-local % curl -H "Authorization: ApiKey NlZGY3pwb0IyT1FPR1RNREtrRlc6WG1VUmZnVnYxSmYyMlpFMDQwTHJ6UQ==" "http://localhost:9200/" ⏎

{
  "name" : "64da5c780379",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "__iGUnK-TFq8FlqdBwpWYg",
  "version" : {
    "number" : "9.2.1",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "4ad0ef0e98a2e72fafbd79a19fa5cae2f026117d",
    "build_date" : "2025-11-06T22:07:39.673130621Z",
    "build_snapshot" : false,
    "lucene_version" : "10.3.1",
    "minimum_wire_compatibility_version" : "8.19.0",
    "minimum_index_compatibility_version" : "8.0.0"
  },
  "tagline" : "You Know, for Search"
}
elastic-start-local %

成功すれば,.env ファイルを編集して新たな API キーに変更しておくと良いでしょう.

.env
START_LOCAL_VERSION=0.12.0
ES_LOCAL_VERSION=9.2.1-arm64
ES_LOCAL_CONTAINER_NAME=es-local-dev
ES_LOCAL_PASSWORD=rs8O0QpW
ES_LOCAL_PORT=9200
ES_LOCAL_URL=http://localhost:${ES_LOCAL_PORT}
ES_LOCAL_DISK_SPACE_REQUIRED=1gb
ES_LOCAL_JAVA_OPTS="-Xms128m -Xmx2g"
KIBANA_LOCAL_CONTAINER_NAME=kibana-local-dev
KIBANA_LOCAL_SETTINGS_CONTAINER_NAME=kibana-local-settings
KIBANA_LOCAL_PORT=5601
KIBANA_LOCAL_PASSWORD=AODa7v3M
KIBANA_ENCRYPTION_KEY=Ew80JRm6PQowvUZHNRjELkX8PLXw96I2
ES_LOCAL_API_KEY=NlZGY3pwb0IyT1FPR1RNREtrRlc6WG1VUmZnVnYxSmYyMlpFMDQwTHJ6UQ==

目次に戻る