この設定が反映されるのはelasticsearch.ymlではなくdocker-compose.ymlなのはなぜなのでしょうか?
http.portの設定をelasticsearch.ymlに設定した場合でも、もちろん設定は反映されます。
以前提示された内容ですと、elasticsearch.ymlが意図しない場所に置かれてしまっていますので正しい場所に配置するようにします。
(configファイルの読み先を変えるような設定をしていない前提です)
そうすれば、設定ファイルで指定したhttp.portの値が有効になっていることが確認できるかと思います。
- Dockerfile例(COPY行を見てください。 usr/share/elasticsearch/config/elasticsearch.ymlに設定ファイルをおいています)
FROM docker.elastic.co/elasticsearch/elasticsearch:7.4.0
RUN elasticsearch-plugin install analysis-kuromoji
COPY config/elasticsearch.yml /usr/share/elasticsearch/config/elasticsearch.yml
RUN chown elasticsearch:elasticsearch config/elasticsearch.yml
次に、docker-composeでの環境変数の指定とelasticsearch.ymlの使い分けについてです。
どういう使い方をされたいのかという用途や目的によって考え方は変わるかと思います。
例えば、ベースとなるような共通的な設定はelasticsearch.ymlにおいておき、
個々のノードごとにちょっとずつ違う設定をしたい場合は、個々にymlファイルを用意するのも面倒と考えれば、環境変数で動的に変更できるようにしておくことも考えられます。
もちろん環境変数ではなく、volume mountでymlファイルを渡すという考え方もあるかと思います。
version: '2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.4.0
container_name: elasticsearch
environment:
- cluster.name=docker-cluster
- discovery.type=single-node
- bootstrap.memory_lock=true
ulimits:
memlock:
soft: -1
hard: -1
volumes:
# ↓ イメージに含めるのではなく、コンテナ起動時に外から渡す形にする
- ./config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml``
これも、どのぐらいのコンテナ数があるのか、どのぐらいelasticsearch.ymlのパターンがありそうなのかによってどれが良いのかは変わってくるかと思うので、
どうすべき、ということは一概には言えないかと。
ご参考になれば幸いです。