- DockerでElasticsearchをインストールする
- DockerでElasticsearchを実行する
- Docker Composeを使用してマルチノードクラスターを開始する
- 本番環境でのDockerイメージの使用
- vm.max_map_countを少なくとも262144に設定する
- 設定ファイルはelasticsearchユーザーによって読み取れる必要があります
- nofileおよびnprocのulimitsを増加させる
- スワッピングを無効にする
- 公開ポートをランダム化する
- ヒープサイズを手動で設定する
- Elasticsearch設定ファイルのマウント
- 暗号化されたElasticsearchキーストアを作成する
- カスタムDockerイメージの使用
- ElasticsearchのDockerエラーをトラブルシュートする
- elasticsearch.keystoreはディレクトリです
- elasticsearch.keystore: デバイスまたはリソースがビジーです
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ネットワークを作成します。
docker network create elastic
- 3. ElasticsearchのDockerイメージをプルします。
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.15.2
- 4. オプション: 環境に合わせてCosignをインストールします。その後、Cosignを使用してElasticsearchイメージの署名を確認します。
wget https://artifacts.elastic.co/cosign.pub
cosign verify --key cosign.pub docker.elastic.co/elasticsearch/elasticsearch:8.15.2
``````sh
Verification for docker.elastic.co/elasticsearch/elasticsearch:8.15.2 --
The following checks were performed on each of these signatures:
- The cosign claims were validated
- Existence of the claims in the transparency log was verified offline
- The signatures were verified against the specified public key
`
- 5. Elasticsearchコンテナを起動します。
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を初めて起動したときにのみ表示されます。次のコマンドを使用して資格情報を再生成できます。docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
``````sh
export ELASTIC_PASSWORD="your_password"
`
- 7. コンテナからローカルマシンに
http_ca.crt
SSL証明書をコピーします。docker cp es01:/usr/share/elasticsearch/config/certs/http_ca.crt .
- 8. Elasticsearchが実行されていることを確認するために、ElasticsearchにREST APIコールを行います。
curl --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200
ノードを追加する
- 1. 既存のノードを使用して、新しいノードの登録トークンを生成します。
登録トークンは30分間有効です。docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
- 2. 新しいElasticsearchコンテナを起動します。登録トークンを環境変数として含めます。
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を呼び出して、ノードがクラスターに追加されたことを確認します。
curl --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200/_cat/nodes
Kibanaを実行する
- 1. KibanaのDockerイメージをプルします。
docker pull docker.elastic.co/kibana/kibana:8.15.2
- 2. オプション: Kibanaイメージの署名を確認します。
wget https://artifacts.elastic.co/cosign.pub
cosign verify --key cosign.pub docker.elastic.co/kibana/kibana:8.15.2
- 3. Kibanaコンテナを起動します。
docker run --name kib01 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:8.15.2
- 4. Kibanaが起動すると、ターミナルに一意の生成リンクが出力されます。このリンクをウェブブラウザで開いてKibanaにアクセスします。
- 5. ブラウザに、Elasticsearchを起動したときに生成された登録トークンを入力します。
トークンを再生成するには、次のコマンドを実行します:docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
- 6. Elasticsearchを起動したときに生成されたパスワードを使用して、
elastic
ユーザーとしてKibanaにログインします。
パスワードを再生成するには、次のコマンドを実行します:docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
コンテナを削除する
コンテナとそのネットワークを削除するには、次のコマンドを実行します:
# Elasticネットワークを削除する
docker network rm elastic
# Elasticsearchコンテナを削除する
docker rm es01
docker rm es02
# Kibanaコンテナを削除する
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
# 'elastic'ユーザーのパスワード(6文字以上)
ELASTIC_PASSWORD=changeme
# 'kibana_system'ユーザーのパスワード(6文字以上)
KIBANA_PASSWORD=changeme
...
- 5.
.env
ファイルで、STACK_VERSION
を現在のElastic Stackバージョンに設定します。
Txt
...
# Version of Elastic products
STACK_VERSION=8.15.2
...
- 6. デフォルトでは、Docker Compose構成はすべてのネットワークインターフェースでポート
9200
を公開します。
外部ホストにポート9200
を公開しないようにするには、ES_PORT
を127.0.0.1:9200
に設定します。これにより、Elasticsearchはホストマシンからのみアクセス可能になります。
Txt
...
# Port to expose Elasticsearch HTTP API to the host
#ES_PORT=9200
ES_PORT=127.0.0.1:9200
...
- 7. クラスターを開始するには、プロジェクトディレクトリから次のコマンドを実行します。
docker-compose up -d
- 8. クラスターが起動したら、ウェブブラウザでhttp://localhost:5601を開いてKibanaにアクセスします。
- 9. 以前に設定した
elastic
ユーザーとしてKibanaにログインします。
クラスターを停止して削除する
クラスターを停止するには、docker-compose down
を実行します。Dockerボリューム内のデータは保持され、docker-compose up
でクラスターを再起動するときに読み込まれます。
docker-compose down
クラスターを停止するときにネットワーク、コンテナ、およびボリュームを削除するには、-v
オプションを指定します:
docker-compose down -v
次のステップ
テスト用のElasticsearch環境が設定されました。真剣な開発を開始する前に、またはElasticsearchを本番環境で使用する前に、要件と推奨事項を確認してください。
本番環境でのDockerイメージの使用
ElasticsearchをDockerで本番環境で実行する際に適用される要件と推奨事項は次のとおりです。
vm.max_map_countを少なくとも262144に設定する
`````vm.max_map_count`````を設定する方法は、プラットフォームによって異なります。
#### Linux
`````vm.max_map_count`````設定の現在の値を表示するには、次のコマンドを実行します:
``````sh
grep vm.max_map_count /etc/sysctl.conf
vm.max_map_count=262144
`
ライブシステムで設定を適用するには、次のコマンドを実行します:
sysctl -w vm.max_map_count=262144
#### macOS with Docker for Mac
`````vm.max_map_count`````設定は、xhyve仮想マシン内で設定する必要があります:
- 1*.* コマンドラインから、次のコマンドを実行します:
``````sh
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
`
- 2. Enterを押して、
sysctl
を使用してvm.max_map_count
を構成します:sysctl -w vm.max_map_count=262144
- 3.
screen
セッションを終了するには、Ctrl a d
と入力します。
WindowsおよびmacOS with Docker Desktop
``````sh
docker-machine ssh
sudo sysctl -w vm.max_map_count=262144
`
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ウィンドウで次のコマンドを実行する必要があります:
wsl -d docker-desktop -u root
sysctl -w vm.max_map_count=262144
これらのWSLバージョンを使用していて、Dockerを再起動するたびにこれらのコマンドを実行したくない場合は、次のようにしてこの設定を持つすべてのWSLディストリビューションをグローバルに変更できます。
テキスト
[wsl2]
kernelCommandLine = "sysctl.vm.max_map_count=262144"
これにより、すべてのWSL2 VMが起動時にその設定が割り当てられます。
Windows 11、またはWindows 10の22H2バージョンでMicrosoft StoreバージョンのWSLをインストールしている場合は、「docker-desktop」WSLディストリビューション内の/etc/sysctl.confを次のように変更できます。
テキスト
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
へのグループアクセスを付与することです。
たとえば、バインドマウントを介してデータを保存するためにローカルディレクトリを準備するには:
mkdir esdatadir
chmod g+rwx esdatadir
chgrp 0 esdatadir
カスタムUIDおよびGIDを使用してElasticsearchコンテナを実行することもできます。ファイルの権限がElasticsearchの実行を妨げないことを確認する必要があります。2つのオプションのいずれかを使用できます:
config
、data
、logs
ディレクトリをバインドマウントします。プラグインをインストールする予定で、カスタムDockerイメージを作成したくない場合は、plugins
ディレクトリもバインドマウントする必要があります。--group-add 0
コマンドラインオプションをdocker run
に渡します。これにより、Elasticsearchが実行されているユーザーがコンテナ内のroot
(GID 0)グループのメンバーでもあることが保証されます。
nofileおよびnprocのulimitsを増加させる
nofileおよびnprocのulimitsをElasticsearchコンテナで利用できるようにする必要があります。Dockerデーモンのinitシステムがそれらを許容値に設定していることを確認してください。
ulimitsのDockerデーモンのデフォルトを確認するには、次のコマンドを実行します:
docker run --rm docker.elastic.co/elasticsearch/elasticsearch:8.15.2 /bin/bash -c 'ulimit -Hn && ulimit -Sn && ulimit -Hu && ulimit -Su'
必要に応じて、デーモンで調整するか、コンテナごとに上書きします。たとえば、docker run
を使用する場合は、次のように設定します:
--ulimit nofile=65535:65535
スワッピングを無効にする
パフォーマンスとノードの安定性のために、スワッピングを無効にする必要があります。これを行う方法については、スワッピングを無効にするを参照してください。
bootstrap.memory_lock: true
アプローチを選択した場合、Docker Daemonでmemlock: true
ulimitを定義するか、サンプルコンポーズファイルに示されているようにコンテナに明示的に設定する必要があります。docker run
を使用する場合は、次のように指定できます:
-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を使用するには、次のコマンドを使用します。
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
### デプロイメントを特定のイメージバージョンに固定する
デプロイメントを特定のElasticsearch Dockerイメージのバージョンに固定します。たとえば、`````docker.elastic.co/elasticsearch/elasticsearch:8.15.2`````。
### 常にデータボリュームをバインドする
`````/usr/share/elasticsearch/data`````でバインドされたボリュームを使用する理由は次のとおりです:
- 1*.* Elasticsearchノードのデータは、コンテナが終了しても失われません
- 2*.* ElasticsearchはI/Oに敏感であり、Dockerストレージドライバーは高速I/Oには理想的ではありません
- 3*.* 高度な[Dockerボリュームプラグイン](https://docs.docker.com/engine/extend/plugins/#volume-plugins)を使用できます
### loop-lvmモードの使用を避ける
devicemapperストレージドライバーを使用している場合は、デフォルトの`````loop-lvm`````モードを使用しないでください。docker-engineを[direct-lvm](https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/#configure-docker-with-devicemapper)を使用するように構成します。
### ログを中央集約する
異なる[ロギングドライバー](https://docs.docker.com/engine/admin/logging/overview/)を使用してログを中央集約することを検討してください。また、デフォルトのjson-fileロギングドライバーは本番環境での使用には理想的ではないことに注意してください。
## DockerでElasticsearchを構成する
Dockerで実行する場合、[Elasticsearchの設定ファイル](cbd51842921e98c1.md#config-files-location)は`````/usr/share/elasticsearch/config/`````から読み込まれます。
カスタム設定ファイルを使用するには、[設定ファイルをバインドマウント](b51680e1ebed39df.md#docker-config-bind-mount)して、イメージ内の設定ファイルの上にマウントします。
Docker環境変数を使用して、個々のElasticsearch設定パラメータを設定できます。[サンプルコンポーズファイル](b51680e1ebed39df.md#docker-compose-file)と[単一ノードの例](b51680e1ebed39df.md#docker-cli-run-dev-mode)はこの方法を使用しています。設定名をそのまま環境変数名として使用できます。これができない場合、たとえば、オーケストレーションプラットフォームが環境変数名にピリオドを禁止している場合は、次のように設定名を変換する代替スタイルを使用できます。
- 1*.* 設定名を大文字に変更する
- 2*.* `````ES_SETTING_`````でプレフィックスを付ける
- 3*.* アンダースコア(`````_`````)を重複させてエスケープする
- 4*.* すべてのピリオド(`````.`````)をアンダースコア(`````_`````)に変換する
たとえば、`````-e bootstrap.memory_lock=true`````は`````-e ES_SETTING_BOOTSTRAP_MEMORY__LOCK=true`````になります。
ファイルの内容を使用して、`````ELASTIC_PASSWORD`````または`````KEYSTORE_PASSWORD`````環境変数の値を設定できます。これは、パスワードなどの秘密をElasticsearchに直接指定せずに渡すのに便利です。
たとえば、ファイルからElasticsearchのブートストラップパスワードを設定するには、ファイルをバインドマウントし、`````ELASTIC_PASSWORD_FILE`````環境変数をマウント場所に設定します。パスワードファイルを`````/run/secrets/bootstrapPassword.txt`````にマウントする場合は、次のように指定します:
``````sh
-e ELASTIC_PASSWORD_FILE=/run/secrets/bootstrapPassword.txt
`
Elasticsearch設定パラメータをコマンドラインオプションとして渡すために、イメージのデフォルトコマンドを上書きできます。たとえば:
docker run <various parameters> bin/elasticsearch -Ecluster.name=mynewclustername
設定ファイルをバインドマウントすることは通常、本番環境での推奨方法ですが、設定を含むカスタムDockerイメージを作成することもできます。
Elasticsearch設定ファイルのマウント
カスタム設定ファイルを作成し、Dockerイメージ内の対応するファイルの上にバインドマウントします。たとえば、custom_elasticsearch.yml
をdocker run
でバインドマウントするには、次のように指定します:
-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
オプションで使用します。キーストアのパスワードを入力するように求められます。
たとえば:
docker run -it --rm \
-v full_path_to/config:/usr/share/elasticsearch/config \
docker.elastic.co/elasticsearch/elasticsearch:8.15.2 \
bin/elasticsearch-keystore create -p
キーストアにセキュア設定を追加または更新するために、docker run
コマンドを使用することもできます。設定値を入力するように求められます。キーストアが暗号化されている場合、キーストアのパスワードを入力するように求められます。
docker run -it --rm \
-v full_path_to/config:/usr/share/elasticsearch/config \
docker.elastic.co/elasticsearch/elasticsearch:8.15.2 \
bin/elasticsearch-keystore \
add my.secure.setting \
my.other.secure.setting
すでにキーストアを作成していて、更新する必要がない場合は、elasticsearch.keystore
ファイルを直接バインドマウントできます。KEYSTORE_PASSWORD
環境変数を使用して、起動時にコンテナにキーストアのパスワードを提供できます。たとえば、docker run
コマンドには次のオプションが含まれる場合があります:
-v full_path_to/config/elasticsearch.keystore:/usr/share/elasticsearch/config/elasticsearch.keystore
-e KEYSTORE_PASSWORD=mypassword
カスタムDockerイメージの使用
一部の環境では、構成を含むカスタムイメージを準備する方が理にかなっている場合があります。これを達成するためのDockerfile
は、次のようにシンプルかもしれません:
FROM docker.elastic.co/elasticsearch/elasticsearch:8.15.2
COPY --chown=elasticsearch:elasticsearch elasticsearch.yml /usr/share/elasticsearch/config/
その後、次のようにイメージをビルドして実行できます:
docker build --tag=elasticsearch-custom .
docker run -ti -v /usr/share/elasticsearch/data elasticsearch-custom
一部のプラグインには追加のセキュリティ権限が必要です。これらの権限を明示的に受け入れる必要があります。方法は次のいずれかです:
- Dockerイメージを実行するときに
tty
を添付し、プロンプトが表示されたときに権限を許可します。 - セキュリティ権限を確認し、適切であればプラグインインストールコマンドに
--batch
フラグを追加して受け入れます。
詳細については、プラグイン管理を参照してください。
ElasticsearchのDockerエラーをトラブルシュートする
DockerでElasticsearchを実行する際の一般的なエラーを解決する方法は次のとおりです。
elasticsearch.keystoreはディレクトリです
Txt
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
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. コマンドを再試行します。