我正努力让Docker镜像配置正确。我想要的Docker容器是使用以下参数在随机的内核选择端口上运行:--publish 0:9200 --publish 0:9300
。
我遇到的问题是我还需要设置这些参数:-e "http.port=PORT" -e "transport.publish_port=ANOTHER_PORT"
,如果我想使用与默认值不同的端口(9200,9300)。
这是我显然不能做的事情,因为我在运行容器时并不知道这些端口。我认为删除这些参数应该可以解决问题,并使Elasticsearch绑定到可用的端口(基于正在使用的私有端口)。不幸的是,情况并非如此。
该问题是否有任何解决方案,或者只是Elasticsearch图像无法使用随机端口运行。
答案 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
此端口
$ 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将在端口9233
和9317
希望,这会有所帮助。