DockerでElasticsearchをインストールする

ElasticsearchのDockerイメージは、ElasticのDockerレジストリから入手できます。公開されているすべてのDockerイメージとタグのリストは、www.docker.elastic.coで確認できます。ソースコードはGitHubにあります。

このパッケージには、無料機能とサブスクリプション機能の両方が含まれています。すべての機能を試すために、30日間のトライアルを開始してください。

ローカル開発でElasticsearchをテストしたいだけの場合は、Elasticsearchをローカルで実行するを参照してください。このセットアップは本番環境には適していないことに注意してください。

DockerでElasticsearchを実行する

Dockerコマンドを使用して、開発またはテスト用の単一ノードElasticsearchクラスターを起動します。その後、追加のDockerコマンドを実行して、テストクラスターにノードを追加したり、Kibanaを実行したりできます。

このセットアップでは、デフォルトで複数のElasticsearchノードやKibanaは実行されません。Kibanaを使用してマルチノードクラスターを作成するには、代わりにDocker Composeを使用してください。Docker Composeを使用してマルチノードクラスターを開始するを参照してください。

単一ノードクラスターを開始する

  • 1. Dockerをインストールします。自分の環境に合わせてDockerをインストールするには、Get Dockerを訪問してください。
    Docker Desktopを使用している場合は、少なくとも4GBのメモリを割り当てるようにしてください。Docker Desktopのメモリ使用量は、設定 > リソースに移動して調整できます。
  • 2. 新しいDockerネットワークを作成します。
    1. docker network create elastic
  • 3. ElasticsearchのDockerイメージをプルします。
    1. docker pull docker.elastic.co/elasticsearch/elasticsearch:8.15.2
  • 4. オプション: 環境に合わせてCosignをインストールします。その後、Cosignを使用してElasticsearchイメージの署名を確認します。
    1. wget https://artifacts.elastic.co/cosign.pub
    2. cosign verify --key cosign.pub docker.elastic.co/elasticsearch/elasticsearch:8.15.2
    1. ``````sh
    2. Verification for docker.elastic.co/elasticsearch/elasticsearch:8.15.2 --
    3. The following checks were performed on each of these signatures:
    4. - The cosign claims were validated
    5. - Existence of the claims in the transparency log was verified offline
    6. - The signatures were verified against the specified public key
    7. `
  • 5. Elasticsearchコンテナを起動します。
    1. docker run --name es01 --net elastic -p 9200:9200 -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:8.15.2
    -mフラグを使用して、コンテナのメモリ制限を設定します。これにより、JVMサイズを手動で設定する必要がなくなります
    コマンドは、elasticユーザーパスワードとKibanaの登録トークンを出力します。
  • 6. 生成されたelasticパスワードと登録トークンをコピーします。これらの資格情報は、Elasticsearchを初めて起動したときにのみ表示されます。次のコマンドを使用して資格情報を再生成できます。
    1. docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
    2. docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
    1. ``````sh
    2. export ELASTIC_PASSWORD="your_password"
    3. `
  • 7. コンテナからローカルマシンにhttp_ca.crt SSL証明書をコピーします。
    1. docker cp es01:/usr/share/elasticsearch/config/certs/http_ca.crt .
  • 8. Elasticsearchが実行されていることを確認するために、ElasticsearchにREST APIコールを行います。
    1. curl --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200

ノードを追加する

  • 1. 既存のノードを使用して、新しいノードの登録トークンを生成します。
    1. docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
    登録トークンは30分間有効です。
  • 2. 新しいElasticsearchコンテナを起動します。登録トークンを環境変数として含めます。
    1. docker run -e ENROLLMENT_TOKEN="<token>" --name es02 --net elastic -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:8.15.2
  • 3. cat nodes APIを呼び出して、ノードがクラスターに追加されたことを確認します。
    1. curl --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200/_cat/nodes

Kibanaを実行する

  • 1. KibanaのDockerイメージをプルします。
    1. docker pull docker.elastic.co/kibana/kibana:8.15.2
  • 2. オプション: Kibanaイメージの署名を確認します。
    1. wget https://artifacts.elastic.co/cosign.pub
    2. cosign verify --key cosign.pub docker.elastic.co/kibana/kibana:8.15.2
  • 3. Kibanaコンテナを起動します。
    1. docker run --name kib01 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.15.2
  • 4. Kibanaが起動すると、ターミナルに一意の生成リンクが出力されます。このリンクをウェブブラウザで開いてKibanaにアクセスします。
  • 5. ブラウザに、Elasticsearchを起動したときに生成された登録トークンを入力します。
    トークンを再生成するには、次のコマンドを実行します:
    1. docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
  • 6. Elasticsearchを起動したときに生成されたパスワードを使用して、elasticユーザーとしてKibanaにログインします。
    パスワードを再生成するには、次のコマンドを実行します:
    1. docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

コンテナを削除する

コンテナとそのネットワークを削除するには、次のコマンドを実行します:

  1. # Elasticネットワークを削除する
  2. docker network rm elastic
  3. # Elasticsearchコンテナを削除する
  4. docker rm es01
  5. docker rm es02
  6. # Kibanaコンテナを削除する
  7. docker rm kib01

次のステップ

テスト用のElasticsearch環境が設定されました。真剣な開発を開始する前に、またはElasticsearchを本番環境で使用する前に、要件と推奨事項を確認してください。

Docker Composeを使用してマルチノードクラスターを開始する

Docker Composeを使用して、Kibanaを含む3ノードのElasticsearchクラスターを起動します。Docker Composeを使用すると、単一のコマンドで複数のコンテナを起動できます。

クラスターを構成して起動する

  • 1. Docker Composeをインストールします。自分の環境に合わせてDocker Composeをインストールするには、Docker Composeのドキュメントを訪問してください。
    Docker Desktopを使用している場合、Docker Composeは自動的にインストールされます。Docker Desktopに少なくとも4GBのメモリを割り当てるようにしてください。Docker Desktopのメモリ使用量は、設定 > リソースに移動して調整できます。
  • 2. プロジェクト用の空のディレクトリを作成するか、移動します。
  • 3. 次のファイルをプロジェクトディレクトリにダウンロードして保存します:
  • 4. .envファイルで、ELASTIC_PASSWORDおよびKIBANA_PASSWORD変数のパスワードを指定します。
    パスワードは英数字でなければならず、!@などの特殊文字を含めることはできません。docker-compose.ymlファイルに含まれるbashスクリプトは、英数字のみで動作します。例:

Txt

  1. # 'elastic'ユーザーのパスワード(6文字以上)
  2. ELASTIC_PASSWORD=changeme
  3. # 'kibana_system'ユーザーのパスワード(6文字以上)
  4. KIBANA_PASSWORD=changeme
  5. ...
  • 5. .envファイルで、STACK_VERSIONを現在のElastic Stackバージョンに設定します。

Txt

  1. ...
  2. # Version of Elastic products
  3. STACK_VERSION=8.15.2
  4. ...
  • 6. デフォルトでは、Docker Compose構成はすべてのネットワークインターフェースでポート9200を公開します。
    外部ホストにポート9200を公開しないようにするには、ES_PORT127.0.0.1:9200に設定します。これにより、Elasticsearchはホストマシンからのみアクセス可能になります。

Txt

  1. ...
  2. # Port to expose Elasticsearch HTTP API to the host
  3. #ES_PORT=9200
  4. ES_PORT=127.0.0.1:9200
  5. ...
  • 7. クラスターを開始するには、プロジェクトディレクトリから次のコマンドを実行します。
    1. docker-compose up -d
  • 8. クラスターが起動したら、ウェブブラウザでhttp://localhost:5601を開いてKibanaにアクセスします。
  • 9. 以前に設定したelasticユーザーとしてKibanaにログインします。

クラスターを停止して削除する

クラスターを停止するには、docker-compose downを実行します。Dockerボリューム内のデータは保持され、docker-compose upでクラスターを再起動するときに読み込まれます。

  1. docker-compose down

クラスターを停止するときにネットワーク、コンテナ、およびボリュームを削除するには、-vオプションを指定します:

  1. docker-compose down -v

次のステップ

テスト用のElasticsearch環境が設定されました。真剣な開発を開始する前に、またはElasticsearchを本番環境で使用する前に、要件と推奨事項を確認してください。

本番環境でのDockerイメージの使用

ElasticsearchをDockerで本番環境で実行する際に適用される要件と推奨事項は次のとおりです。

vm.max_map_countを少なくとも262144に設定する

  1. `````vm.max_map_count`````を設定する方法は、プラットフォームによって異なります。
  2. #### Linux
  3. `````vm.max_map_count`````設定の現在の値を表示するには、次のコマンドを実行します:
  4. ``````sh
  5. grep vm.max_map_count /etc/sysctl.conf
  6. vm.max_map_count=262144
  7. `

ライブシステムで設定を適用するには、次のコマンドを実行します:

  1. sysctl -w vm.max_map_count=262144
  1. #### macOS with Docker for Mac
  2. `````vm.max_map_count`````設定は、xhyve仮想マシン内で設定する必要があります:
  3. - 1*.* コマンドラインから、次のコマンドを実行します:
  4. ``````sh
  5. screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
  6. `
  • 2. Enterを押して、sysctlを使用してvm.max_map_countを構成します:
    1. sysctl -w vm.max_map_count=262144
  • 3. screenセッションを終了するには、Ctrl a dと入力します。

WindowsおよびmacOS with Docker Desktop

  1. ``````sh
  2. docker-machine ssh
  3. sudo sysctl -w vm.max_map_count=262144
  4. `

Windows with Docker Desktop WSL 2 backend

Elasticsearchコンテナが正しく起動する前に、vm.max_map_count設定を「docker-desktop」WSLインスタンス内で設定する必要があります。これを行う方法はいくつかありますが、WindowsのバージョンやWSLのバージョンによって異なります。

Windows 10の22H2以前のバージョンを使用している場合、またはWindows 10の22H2バージョンでWSLの組み込みバージョンを使用している場合は、Elasticsearchコンテナを起動する前にDockerを再起動するたびに手動で設定する必要があります。または(毎回再起動時に設定したくない場合)、すべてのWSL2インスタンスにvm.max_map_countを変更するようにグローバルに設定する必要があります。これは、これらのWSLバージョンが/etc/sysctl.confファイルを正しく処理しないためです。

再起動するたびに手動で設定するには、Dockerを再起動するたびにコマンドプロンプトまたはPowerShellウィンドウで次のコマンドを実行する必要があります:

  1. wsl -d docker-desktop -u root
  2. sysctl -w vm.max_map_count=262144

これらのWSLバージョンを使用していて、Dockerを再起動するたびにこれらのコマンドを実行したくない場合は、次のようにしてこの設定を持つすべてのWSLディストリビューションをグローバルに変更できます。

テキスト

  1. [wsl2]
  2. kernelCommandLine = "sysctl.vm.max_map_count=262144"

これにより、すべてのWSL2 VMが起動時にその設定が割り当てられます。

Windows 11、またはWindows 10の22H2バージョンでMicrosoft StoreバージョンのWSLをインストールしている場合は、「docker-desktop」WSLディストリビューション内の/etc/sysctl.confを次のように変更できます。

テキスト

  1. vm.max_map_count = 262144

設定ファイルはelasticsearchユーザーによって読み取れる必要があります

デフォルトでは、Elasticsearchはユーザーelasticsearchとしてコンテナ内で実行され、uid:gidは1000:0です。

例外として、Openshiftは、任意に割り当てられたユーザーIDを使用してコンテナを実行します。Openshiftは、gidが0に設定された永続ボリュームを提供し、調整なしで機能します。

ローカルディレクトリまたはファイルをバインドマウントする場合、elasticsearchユーザーによって読み取れる必要があります。さらに、このユーザーは、config、data、logディレクトリへの書き込みアクセス権を持っている必要があります(Elasticsearchはキーストアを生成できるようにconfigディレクトリへの書き込みアクセスが必要です)。良い戦略は、ローカルディレクトリにgid 0へのグループアクセスを付与することです。

たとえば、バインドマウントを介してデータを保存するためにローカルディレクトリを準備するには:

  1. mkdir esdatadir
  2. chmod g+rwx esdatadir
  3. chgrp 0 esdatadir

カスタムUIDおよびGIDを使用してElasticsearchコンテナを実行することもできます。ファイルの権限がElasticsearchの実行を妨げないことを確認する必要があります。2つのオプションのいずれかを使用できます:

  • configdatalogsディレクトリをバインドマウントします。プラグインをインストールする予定で、カスタムDockerイメージを作成したくない場合は、pluginsディレクトリもバインドマウントする必要があります。
  • --group-add 0コマンドラインオプションをdocker runに渡します。これにより、Elasticsearchが実行されているユーザーがコンテナ内のroot(GID 0)グループのメンバーでもあることが保証されます。

nofileおよびnprocのulimitsを増加させる

nofileおよびnprocのulimitsをElasticsearchコンテナで利用できるようにする必要があります。Dockerデーモンのinitシステムがそれらを許容値に設定していることを確認してください。

ulimitsのDockerデーモンのデフォルトを確認するには、次のコマンドを実行します:

  1. docker run --rm docker.elastic.co/elasticsearch/elasticsearch:8.15.2 /bin/bash -c 'ulimit -Hn && ulimit -Sn && ulimit -Hu && ulimit -Su'

必要に応じて、デーモンで調整するか、コンテナごとに上書きします。たとえば、docker runを使用する場合は、次のように設定します:

  1. --ulimit nofile=65535:65535

スワッピングを無効にする

パフォーマンスとノードの安定性のために、スワッピングを無効にする必要があります。これを行う方法については、スワッピングを無効にするを参照してください。

bootstrap.memory_lock: trueアプローチを選択した場合、Docker Daemonmemlock: true ulimitを定義するか、サンプルコンポーズファイルに示されているようにコンテナに明示的に設定する必要があります。docker runを使用する場合は、次のように指定できます:

  1. -e "bootstrap.memory_lock=true" --ulimit memlock=-1:-1

公開ポートをランダム化する

イメージは、exposes TCPポート9200および9300を公開します。本番クラスターでは、1つのコンテナをホストごとに固定する場合を除き、--publish-allを使用して公開ポートをランダム化することをお勧めします。

ヒープサイズを手動で設定する

デフォルトでは、Elasticsearchはノードの役割とノードのコンテナに利用可能な総メモリに基づいてJVMヒープのサイズを自動的に決定します。このデフォルトのサイズ設定は、ほとんどの本番環境に推奨されます。必要に応じて、JVMヒープサイズを手動で設定することでデフォルトのサイズ設定を上書きできます。

本番環境でヒープサイズを手動で設定するには、/usr/share/elasticsearch/config/jvm.options.dの下にあるJVMオプションファイルをバインドマウントし、希望するヒープサイズ設定を含めます。

テスト用に、ES_JAVA_OPTS環境変数を使用してヒープサイズを手動で設定することもできます。たとえば、1GBを使用するには、次のコマンドを使用します。

  1. docker run -e ES_JAVA_OPTS="-Xms1g -Xmx1g" -e ENROLLMENT_TOKEN="<token>" --name es01 -p 9200:9200 --net elastic -it docker.elastic.co/elasticsearch/elasticsearch:8.15.2
  1. ### デプロイメントを特定のイメージバージョンに固定する
  2. デプロイメントを特定のElasticsearch Dockerイメージのバージョンに固定します。たとえば、`````docker.elastic.co/elasticsearch/elasticsearch:8.15.2`````
  3. ### 常にデータボリュームをバインドする
  4. `````/usr/share/elasticsearch/data`````でバインドされたボリュームを使用する理由は次のとおりです:
  5. - 1*.* Elasticsearchノードのデータは、コンテナが終了しても失われません
  6. - 2*.* ElasticsearchI/Oに敏感であり、Dockerストレージドライバーは高速I/Oには理想的ではありません
  7. - 3*.* 高度な[Dockerボリュームプラグイン](https://docs.docker.com/engine/extend/plugins/#volume-plugins)を使用できます
  8. ### loop-lvmモードの使用を避ける
  9. devicemapperストレージドライバーを使用している場合は、デフォルトの`````loop-lvm`````モードを使用しないでください。docker-engineを[direct-lvm](https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/#configure-docker-with-devicemapper)を使用するように構成します。
  10. ### ログを中央集約する
  11. 異なる[ロギングドライバー](https://docs.docker.com/engine/admin/logging/overview/)を使用してログを中央集約することを検討してください。また、デフォルトのjson-fileロギングドライバーは本番環境での使用には理想的ではないことに注意してください。
  12. ## DockerでElasticsearchを構成する
  13. Dockerで実行する場合、[Elasticsearchの設定ファイル](cbd51842921e98c1.md#config-files-location)は`````/usr/share/elasticsearch/config/`````から読み込まれます。
  14. カスタム設定ファイルを使用するには、[設定ファイルをバインドマウント](b51680e1ebed39df.md#docker-config-bind-mount)して、イメージ内の設定ファイルの上にマウントします。
  15. Docker環境変数を使用して、個々のElasticsearch設定パラメータを設定できます。[サンプルコンポーズファイル](b51680e1ebed39df.md#docker-compose-file)と[単一ノードの例](b51680e1ebed39df.md#docker-cli-run-dev-mode)はこの方法を使用しています。設定名をそのまま環境変数名として使用できます。これができない場合、たとえば、オーケストレーションプラットフォームが環境変数名にピリオドを禁止している場合は、次のように設定名を変換する代替スタイルを使用できます。
  16. - 1*.* 設定名を大文字に変更する
  17. - 2*.* `````ES_SETTING_`````でプレフィックスを付ける
  18. - 3*.* アンダースコア(`````_`````)を重複させてエスケープする
  19. - 4*.* すべてのピリオド(`````.`````)をアンダースコア(`````_`````)に変換する
  20. たとえば、`````-e bootstrap.memory_lock=true``````````-e ES_SETTING_BOOTSTRAP_MEMORY__LOCK=true`````になります。
  21. ファイルの内容を使用して、`````ELASTIC_PASSWORD`````または`````KEYSTORE_PASSWORD`````環境変数の値を設定できます。これは、パスワードなどの秘密をElasticsearchに直接指定せずに渡すのに便利です。
  22. たとえば、ファイルからElasticsearchのブートストラップパスワードを設定するには、ファイルをバインドマウントし、`````ELASTIC_PASSWORD_FILE`````環境変数をマウント場所に設定します。パスワードファイルを`````/run/secrets/bootstrapPassword.txt`````にマウントする場合は、次のように指定します:
  23. ``````sh
  24. -e ELASTIC_PASSWORD_FILE=/run/secrets/bootstrapPassword.txt
  25. `

Elasticsearch設定パラメータをコマンドラインオプションとして渡すために、イメージのデフォルトコマンドを上書きできます。たとえば:

  1. docker run <various parameters> bin/elasticsearch -Ecluster.name=mynewclustername

設定ファイルをバインドマウントすることは通常、本番環境での推奨方法ですが、設定を含むカスタムDockerイメージを作成することもできます。

Elasticsearch設定ファイルのマウント

カスタム設定ファイルを作成し、Dockerイメージ内の対応するファイルの上にバインドマウントします。たとえば、custom_elasticsearch.ymldocker runでバインドマウントするには、次のように指定します:

  1. -v full_path_to/custom_elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

カスタムelasticsearch.ymlファイルをバインドマウントする場合は、network.host: 0.0.0.0設定が含まれていることを確認してください。この設定により、ノードがHTTPおよびトランスポートトラフィックに到達可能であることが保証されます。Dockerイメージの組み込みelasticsearch.ymlファイルには、デフォルトでこの設定が含まれています。

コンテナはユーザーelasticsearchとしてElasticsearchを実行し
uid:gid 1000:0です。バインドマウントされたホストディレクトリおよびファイルは、このユーザーによってアクセス可能でなければならず、データおよびログディレクトリはこのユーザーによって書き込み可能でなければなりません。

暗号化されたElasticsearchキーストアを作成する

デフォルトでは、Elasticsearchはセキュア設定のためにキーストアファイルを自動生成します。このファイルは難読化されていますが、暗号化されていません。

パスワードでセキュア設定を暗号化し、コンテナの外に持続させるには、docker runコマンドを使用して手動でキーストアを作成します。このコマンドは次のことを行う必要があります:

  • configディレクトリをバインドマウントします。このコマンドは、このディレクトリにelasticsearch.keystoreファイルを作成します。エラーを避けるために、elasticsearch.keystoreファイルを直接バインドマウントしないでください。
  • elasticsearch-keystoreツールをcreate -pオプションで使用します。キーストアのパスワードを入力するように求められます。

たとえば:

  1. docker run -it --rm \
  2. -v full_path_to/config:/usr/share/elasticsearch/config \
  3. docker.elastic.co/elasticsearch/elasticsearch:8.15.2 \
  4. bin/elasticsearch-keystore create -p

キーストアにセキュア設定を追加または更新するために、docker runコマンドを使用することもできます。設定値を入力するように求められます。キーストアが暗号化されている場合、キーストアのパスワードを入力するように求められます。

  1. docker run -it --rm \
  2. -v full_path_to/config:/usr/share/elasticsearch/config \
  3. docker.elastic.co/elasticsearch/elasticsearch:8.15.2 \
  4. bin/elasticsearch-keystore \
  5. add my.secure.setting \
  6. my.other.secure.setting

すでにキーストアを作成していて、更新する必要がない場合は、elasticsearch.keystoreファイルを直接バインドマウントできます。KEYSTORE_PASSWORD環境変数を使用して、起動時にコンテナにキーストアのパスワードを提供できます。たとえば、docker runコマンドには次のオプションが含まれる場合があります:

  1. -v full_path_to/config/elasticsearch.keystore:/usr/share/elasticsearch/config/elasticsearch.keystore
  2. -e KEYSTORE_PASSWORD=mypassword

カスタムDockerイメージの使用

一部の環境では、構成を含むカスタムイメージを準備する方が理にかなっている場合があります。これを達成するためのDockerfileは、次のようにシンプルかもしれません:

  1. FROM docker.elastic.co/elasticsearch/elasticsearch:8.15.2
  2. COPY --chown=elasticsearch:elasticsearch elasticsearch.yml /usr/share/elasticsearch/config/

その後、次のようにイメージをビルドして実行できます:

  1. docker build --tag=elasticsearch-custom .
  2. docker run -ti -v /usr/share/elasticsearch/data elasticsearch-custom

一部のプラグインには追加のセキュリティ権限が必要です。これらの権限を明示的に受け入れる必要があります。方法は次のいずれかです:

  • Dockerイメージを実行するときにttyを添付し、プロンプトが表示されたときに権限を許可します。
  • セキュリティ権限を確認し、適切であればプラグインインストールコマンドに--batchフラグを追加して受け入れます。

詳細については、プラグイン管理を参照してください。

ElasticsearchのDockerエラーをトラブルシュートする

DockerでElasticsearchを実行する際の一般的なエラーを解決する方法は次のとおりです。

elasticsearch.keystoreはディレクトリです

Txt

  1. Exception in thread "main" org.elasticsearch.bootstrap.BootstrapException: java.io.IOException: Is a directory: SimpleFSIndexInput(path="/usr/share/elasticsearch/config/elasticsearch.keystore") Likely root cause: java.io.IOException: Is a directory

キーストア関連docker runコマンドが、存在しないelasticsearch.keystoreファイルを直接バインドマウントしようとしました。-vまたは--volumeフラグを使用して存在しないファイルをマウントしようとすると、Dockerは代わりに同じ名前のディレクトリを作成します。

このエラーを解決するには:

  • 1. elasticsearch.keystoreディレクトリをconfigディレクトリ内で削除します。
  • 2. -vまたは--volumeフラグを更新して、キーストアファイルのパスではなくconfigディレクトリパスを指すようにします。例については、暗号化されたElasticsearchキーストアを作成するを参照してください。
  • 3. コマンドを再試行します。

elasticsearch.keystore: デバイスまたはリソースがビジーです

Txt

  1. Exception in thread "main" java.nio.file.FileSystemException: /usr/share/elasticsearch/config/elasticsearch.keystore.tmp -> /usr/share/elasticsearch/config/elasticsearch.keystore: Device or resource busy

docker runコマンドが、elasticsearch.keystoreファイルを直接バインドマウントしながらキーストアを更新しようとしました。キーストアを更新するには、コンテナがconfigディレクトリ内の他のファイルにアクセスする必要があります。keystore.tmpのようなファイルです。

このエラーを解決するには:

  • 1. -vまたは--volumeフラグを更新して、キーストアファイルのパスではなくconfigディレクトリパスを指すようにします。例については、暗号化されたElasticsearchキーストアを作成するを参照してください。
  • 2. コマンドを再試行します。