Elasticsearch docker图像 - 使用自由端口

时间:2018-02-02 08:19:46

标签: docker elasticsearch

我正努力让Docker镜像配置正确。我想要的Docker容器是使用以下参数在随机的内核选择端口上运行:--publish 0:9200 --publish 0:9300

我遇到的问题是我还需要设置这些参数:-e "http.port=PORT" -e "transport.publish_port=ANOTHER_PORT",如果我想使用与默认值不同的端口(9200,9300)。

这是我显然不能做的事情,因为我在运行容器时并不知道这些端口。我认为删除这些参数应该可以解决问题,并使Elasticsearch绑定到可用的端口(基于正在使用的私有端口)。不幸的是,情况并非如此。

该问题是否有任何解决方案,或者只是Elasticsearch图像无法使用随机端口运行。

1 个答案:

答案 0 :(得分:1)

使用--publish-all标志运行docker image。这会将所有端口暴露给随机端口。

$ docker run --publish-all -d elasticsearch:5.6-alpine

让我们检查,

$ docker ps
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS                                              NAMES
cea8026ead0b        elasticsearch:5.6-alpine   "/docker-entrypoint.s"   3 minutes ago       Up 3 minutes        0.0.0.0:32778->9200/tcp, 0.0.0.0:32777->9300/tcp   small_ride

端口公开为

0.0.0.0:32778->9200/tcp
0.0.0.0:32777->9300/tcp

您现在可以使用32778此端口

连接到elasticsearch
$ curl http://127.0.0.1:32778
{
  "name" : "Ui-_rXY",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "du5_h-sQSbilsYq0jQnyNA",
  "version" : {
    "number" : "5.6.6",
    "build_hash" : "7d99d36",
    "build_date" : "2018-01-09T23:55:47.880Z",
    "build_snapshot" : false,
    "lucene_version" : "6.6.1"
  },
  "tagline" : "You Know, for Search"
}

在这种情况下,elasticsearch在9200上运行。但是,如果要更改其默认端口,则需要修改其elasticsearch.yml。 见Original elasticsearch docker repository

您需要将端口设置为

http.port: ${HTTP_PORT}
transport.tcp.port: ${TCP_PORT}

当你运行docker时,你需要提供这个ENV。

$ docker run -e HTTP_PORT=9233 -e TCP_PORT=9317 -d elasticsearch:5.6-alpine

现在,您的elasticsearch将在端口92339317

中运行

希望,这会有所帮助。