# コンテナ上のESでlocalhostへのアクセスできない

**URL:** <https://discuss.elastic.co/t/es-localhost/203626>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [October 15, 2019, 10:56am UTC](https://discuss.elastic.co/t/es-localhost/203626 "2019-10-15T10:56:05Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Masanori\_Mishima](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/masanori_mishima/32/45030_2.png) [@Masanori\_Mishima](https://discuss.elastic.co/u/Masanori_Mishima)\
**Post date:** [October 15, 2019, 10:56am UTC](https://discuss.elastic.co/t/es-localhost/203626/1 "2019-10-15T10:56:05Z")

</div>

以下のdocker-compose.ymlとDockerfile、elasticsearch.ymlの設定で  
コンテナを作成しました。(使用するポート番号は9600)

そこでlocalhost:9600にアクセスしてもERR\_EMPTY\_RESPONSEとなってしまいます。

設定ファイルのパラメータに何か不足があるのでしょうか？

**docker-compose.yml**

> version: '2.2'  
> services:  
> elasticsearch7-4:  
> build: elasticsearch-ver7.4.0-kuromoji  
> container\_name: elasticsearch7-4  
> environment:  
> - node.name=es01  
> - cluster.initial\_master\_nodes=es01  
> - cluster.name=docker-cluster-es7-4  
> - bootstrap.memory\_lock=true  
> - "ES\_JAVA\_OPTS=-Xms512m -Xmx512m"  
> ulimits:  
> memlock:  
> soft: -1  
> hard: -1  
> volumes:  
> - esdata7-4:/usr/share/elasticsearch-7-4/data  
> ports:  
> - 9600:9600  
> volumes:  
> esdata7-4:  
> driver: local

**Dockerfile**

> FROM [docker.elastic.co/elasticsearch/elasticsearch:7.4.0](http://docker.elastic.co/elasticsearch/elasticsearch:7.4.0)  
> RUN elasticsearch-plugin install analysis-kuromoji  
> ADD config/elasticsearch.yml /usr/share/elasticsearch-7-4/config/  
> RUN chown elasticsearch:elasticsearch config/elasticsearch.yml

**elasticsearch.yml**

> cluster.name: 'docker-cluster-es7-4'  
> network.host: 0.0.0.0  
> discovery.zen.minimum\_master\_nodes: 1  
> xpack.security.enabled: false

---

<div class="post-metadata">

**Author:** ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)\
**Post date:** [October 15, 2019, 11:26am UTC](https://discuss.elastic.co/t/es-localhost/203626/2 "2019-10-15T11:26:39Z")

</div>

elasticsearch.ymlの中で、Elasticsearchの待ち受けポートを9600にするような記述が見当たらないようです。

[https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html)

もしかすると、コンテナ側9200で、ホスト側で9600を期待しているということはありませんか？  
とすると、以下のようにすれば解消できるのではと思います。

```auto
ports:
    - 9600:9200

```

コンテナ側も9600だとすると、まずコンテナ側のログを見てみると良いと思います。  
publish\_addressやbound\_addressあたりで待ち受けポートが確認できるかと。

```json
{"type": "server", "timestamp": "2019-10-15T11:20:52,815Z", "level": "INFO", "component": "o.e.h.AbstractHttpServerTransport", "cluster.name": "docker-cluster", "node.name": "8f4e1d21ed7d", "message": "publish_address {172.19.0.2:9200}, bound_addresses {0.0.0.0:9200}", "cluster.uuid": "GjKNsm0FTf2GnCm2MOXuvg", "node.id": "jbVXMQUSQXyNsbMUAZ1hug" }

```

ご参考になれば幸いです。

---

<div class="post-metadata">

**Author:** ![Masanori\_Mishima](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/masanori_mishima/32/45030_2.png) [@Masanori\_Mishima](https://discuss.elastic.co/u/Masanori_Mishima)\
**Post date:** [October 15, 2019, 11:43am UTC](https://discuss.elastic.co/t/es-localhost/203626/3 "2019-10-15T11:43:36Z")

</div>

回答ありがとうございます。  
コンテナ側のログのmessageではpublish\_addressやbound\_addressが確認できなかったのですが、  
回答に載せて頂いた記事によるとデフォルトで9200-9300で設定されており、  
設定してないなら疎通できないということで、ご教示いただいた設定で試したところうまくいきました。ありがとうございます。

elasticsearch.ymlでhttp.port:9600にして再度試したところ同じようなエラーになったのですが、  
これは何故でしょうか？

---

<div class="post-metadata">

**Author:** ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)\
**Post date:** [October 15, 2019, 12:45pm UTC](https://discuss.elastic.co/t/es-localhost/203626/4 "2019-10-15T12:45:29Z")

</div>

Dockerfileの中の記述が気になります。

```auto
ADD config/elasticsearch.yml /usr/share/elasticsearch-7-4/config/
RUN chown elasticsearch:elasticsearch config/elasticsearch.yml

```

Dockerコンテナ内に設定ファイルをホストからコピーして、所有者を変更する部分だと思いますが、  
正しくは、`/usr/share/elasticsearch/config`にコピーすべきではないでしょうか？

また、cluster-nameやhttp.portの指定であれば、コンテナの環境変数に指定することでも設定ができます。

docker-composeであれば、このような感じになります。

```auto
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
      - http.port=9999
  (以下略)

```

ご参考になれば幸いです。

---

<div class="post-metadata">

**Author:** ![Masanori\_Mishima](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/masanori_mishima/32/45030_2.png) [@Masanori\_Mishima](https://discuss.elastic.co/u/Masanori_Mishima)\
**Post date:** [October 24, 2019, 8:39am UTC](https://discuss.elastic.co/t/es-localhost/203626/5 "2019-10-24T08:39:36Z")

</div>

返信が遅れてしまってすみません。  
ご指摘いただいたようにelasticsearch.ymlではなく、docker-composeでポート指定したところうまくいきました。  
回答に記載していた↓のドキュメントでは、http.portがデフォルトで9200-9300ということですが、この設定が反映されるのはelasticsearch.ymlではなくdocker-compose.ymlなのはなぜなのでしょうか？  
何が言いたいかというと、Elasticsearchの設定を行う役割をelasticsearch.ymlをメインにして行えばよいのか、docker-composeに全てもたせるのか？という疑問があります。

> **[HTTP | Elasticsearch Guide \[8.11\] | Elastic](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html)**

自分の場合elasticsearch.ymlでは下記のような設定をし、

> cluster.name: 'docker-cluster-es7-4'  
> network.host: 0.0.0.0  
> discovery.zen.minimum\_master\_nodes: 1  
> xpack.security.enabled: false

docker-composeでは

> elasticsearch7-4:  
> build: elasticsearch-ver7.4.0-kuromoji  
> container\_name: elasticsearch7-4  
> environment:  
> - node.name=es01  
> - cluster.initial\_master\_nodes=es01  
> - cluster.name=docker-cluster-es7-4  
> - bootstrap.memory\_lock=true  
> - http.port=9600  
> - "ES\_JAVA\_OPTS=-Xms512m -Xmx512m"  
> ulimits:  
> memlock:  
> soft: -1  
> hard: -1  
> volumes:  
> - esdata7-4:/usr/share/elasticsearch-7-4/data  
> ports:  
> - 9600:9600  
> volumes:  
> esdata7-4:  
> driver: local

という設定をしており、結局ESの設定はどのymlファイルでやるべきなのかがわからないというところです。

---

<div class="post-metadata">

**Author:** ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)\
**Post date:** [October 24, 2019, 1:28pm UTC](https://discuss.elastic.co/t/es-localhost/203626/6 "2019-10-24T13:28:26Z")

</div>

> この設定が反映されるのはelasticsearch.ymlではなくdocker-compose.ymlなのはなぜなのでしょうか？

http.portの設定をelasticsearch.ymlに設定した場合でも、もちろん設定は反映されます。

以前提示された内容ですと、elasticsearch.ymlが意図しない場所に置かれてしまっていますので正しい場所に配置するようにします。  
（configファイルの読み先を変えるような設定をしていない前提です）  
そうすれば、設定ファイルで指定したhttp.portの値が有効になっていることが確認できるかと思います。

- Dockerfile例（COPY行を見てください。 usr/share/elasticsearch/config/elasticsearch.ymlに設定ファイルをおいています）

```Dockerfile
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ファイルを渡すという考え方もあるかと思います。

```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のパターンがありそうなのかによってどれが良いのかは変わってくるかと思うので、  
どうすべき、ということは一概には言えないかと。

ご参考になれば幸いです。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [November 21, 2019, 1:28pm UTC](https://discuss.elastic.co/t/es-localhost/203626/7 "2019-11-21T13:28:42Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
