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

我试图用这个docker图像testingdocker。 事情应该是直截了当的。 但事实并非如此。

我运行这个命令来启动容器:

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,并testing了一下:

 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的端口映射似乎有时会失败。 我多次遇到这个问题。 相同的testing脚本在启动时工作,而不在另一个上。

有一件事情是一致的,如果事情在一次启动的时候坏了,那么每次我重新启动Docker映像时都会失败。 它甚至在我放弃容器并用图像开始一个新的之后仍然失败。 这似乎是docker守护程序的一个问题。

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

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

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