elasticsearch - 使用Elastic Docker镜像进行端口转发

标签 elasticsearch docker

我正在尝试使用this docker image测试docker。事情应该很直接。但事实并非如此。

我运行了以下命令以启动容器:

sudo docker run -d -p 9200:9200 -p 9300:9300 elasticsearch -Des.node.name="ElasticTestNode"

然后,我尝试在主机上运行以下命令:
# curl -XPUT "http://localhost:9200/movies/movie/3" -d'
{
    "title": "To Kill a Mockingbird",
    "director": "Robert Mulligan",
    "year": 1962,
    "genres": ["Crime", "Drama", "Mystery"]
}'

我期待看到某种成功的消息。相反,命令只是停留在上。没有输出,也没有停止。我必须按Ctrl-X退出。

突然想到,我在docker内部启动了一个bash shell并进行了测试:
sudo sudo docker exec -i -t some-docker-id /bin/bash
root@somehash:/usr/share/elasticsearch# curl -XPUT "http://localhost:9200/movies/movie/3" -d'
{
    "title": "To Kill a Mockingbird",
    "director": "Robert Mulligan",
    "year": 1962,
    "genres": ["Crime", "Drama", "Mystery"]
}'
{"_index":"movies","_type":"movie","_id":"3","_version":1,"_shards":{"total":2,"successful":1,"failed":0},"created":true}root@somehash:/usr/share/elasticsearch#

这是成功的。我做错了什么?

更新:在主机上尝试了另一个命令:
$ curl -XPUT -v "http://localhost:9200/movies/movie/3" -d'
{
    "title": "To Kill a Mockingbird",
    "director": "Robert Mulligan",
    "year": 1962,
    "genres": ["Crime", "Drama", "Mystery"]
}'
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 9200 (#0)
> PUT /movies/movie/3 HTTP/1.1
> Host: localhost:9200
> User-Agent: curl/7.43.0
> Accept: */*
> Content-Length: 139
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 139 out of 139 bytes

卡在这里...
# sudo docker logs docker-id
[2016-09-28 11:52:16,630][INFO ][node                     ] [ElasticTestNode] version[2.4.0], pid[1], build[ce9f0c7/2016-08-29T09:14:17Z]
[2016-09-28 11:52:16,631][INFO ][node                     ] [ElasticTestNode] initializing ...
[2016-09-28 11:52:17,202][INFO ][plugins                  ] [ElasticTestNode] modules [reindex, lang-expression, lang-groovy], plugins [], sites []
[2016-09-28 11:52:17,219][INFO ][env                      ] [ElasticTestNode] using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/sda8)]], net usable_space [5.4gb], net total_space [19.5gb], spins? [possibly], types [ext4]
[2016-09-28 11:52:17,219][INFO ][env                      ] [ElasticTestNode] heap size [990.7mb], compressed ordinary object pointers [true]
[2016-09-28 11:52:18,816][INFO ][node                     ] [ElasticTestNode] initialized
[2016-09-28 11:52:18,816][INFO ][node                     ] [ElasticTestNode] starting ...
[2016-09-28 11:52:18,877][INFO ][transport                ] [ElasticTestNode] publish_address {172.17.0.22:9300}, bound_addresses {[::]:9300}
[2016-09-28 11:52:18,881][INFO ][discovery                ] [ElasticTestNode] elasticsearch/LCo5k0dARimsWFXjN1Yu0A
[2016-09-28 11:52:21,915][INFO ][cluster.service          ] [ElasticTestNode] new_master {ElasticTestNode}{LCo5k0dARimsWFXjN1Yu0A}{172.17.0.22}{172.17.0.22:9300}, reason: zen-disco-join(elected_as_master, [0] joins received)
[2016-09-28 11:52:21,924][INFO ][http                     ] [ElasticTestNode] publish_address {172.17.0.22:9200}, bound_addresses {[::]:9200}
[2016-09-28 11:52:21,925][INFO ][node                     ] [ElasticTestNode] started
[2016-09-28 11:52:21,960][INFO ][gateway                  ] [ElasticTestNode] recovered [0] indices into cluster_state

最佳答案

似乎docker的端口映射有时会失败。我已经多次遇到此问题。相同的测试脚本可在引导上工作,而不能在另一个引导上工作。

一件事是,如果一次启动出现问题,那么每次重启docker镜像时,它都会失败。即使我抛弃了容器并使用图像开始一个新容器,它仍然会失败。这似乎是docker守护程序的问题。

我要解决此问题的方法是停止所有容器并重新启动docker守护程序:

sudo docker stop $(docker ps -a -q)
sudo systemctl restart docker
sudo docker start $(docker ps -a -q)

这个对我有用。希望有人会有所帮助。

关于elasticsearch - 使用Elastic Docker镜像进行端口转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39745182/

相关文章:

kibana - 在 Kibana 中显示 n-greatest

elasticsearch - queryDSL-elasticsearch-必须与不能一起不能给出预期的结果

elasticsearch - 如何配置spring-boot micrometer插入elasticsearch?

database - docker-compose 服务的集中配置

mysql - 将 mysql 服务器与 docker 一起使用的最佳方法是什么?

elasticsearch - Elasticsearch:如何在日期范围之间的URL查询中获取每天大小的store.size和pri.store.size

regex - 用于提取模式和事件的 Elasticsearch 聚合

docker - docker stats不显示流视频容器的ZERO Net I/O

node.js - ECONNREFUSED在Docker容器内部;访问远程API

使用 Docker 进行 Laravel 存储