现象
➜ ~ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES3b45b6a8d0fc elasticsearch:latest "/bin/bash" 2 hours ago Up About an hour 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp ela-slave
端口是已经映射的
➜ ~ curl 127.0.0.1:9200curl: (52) Empty reply from server
但是无法访问
原因:
docker里面的host不能配置127.0.0.1 或者192.168.0.1 或则宿主机器将无法访问端口
解决方案
修改 /usr/local/elasticsearch-2.4.1/config 参数
# network.host: 192.168.0.1
network.host: 0.0.0.0将其改成0.0.0.0
启动后的效果如下
u should upgrade[2016-10-18 06:48:05,655][INFO ][node ] [Wilson Fisk] version[2.4.1], pid[386], build[c67dc32/2016-09-27T18:57:55Z][2016-10-18 06:48:05,657][INFO ][node ] [Wilson Fisk] initializing ...[2016-10-18 06:48:06,657][INFO ][plugins ] [Wilson Fisk] modules [reindex, lang-expression, lang-groovy], plugins [], sites [][2016-10-18 06:48:06,707][INFO ][env ] [Wilson Fisk] using [1] data paths, mounts [[/ (none)]], net usable_space [54.9gb], net total_space [59gb], spins? [possibly], types [aufs][2016-10-18 06:48:06,709][INFO ][env ] [Wilson Fisk] heap size [1007.3mb], compressed ordinary object pointers [true][2016-10-18 06:48:09,754][INFO ][node ] [Wilson Fisk] initialized[2016-10-18 06:48:09,755][INFO ][node ] [Wilson Fisk] starting ...[2016-10-18 06:48:10,014][INFO ][transport ] [Wilson Fisk] publish_address {172.17.0.3:9300}, bound_addresses {[::]:9300}[2016-10-18 06:48:10,030][INFO ][discovery ] [Wilson Fisk] elasticsearch/cbkE0IpITIGpLDXEQduQ1Q[2016-10-18 06:48:13,193][INFO ][cluster.service ] [Wilson Fisk] new_master {Wilson Fisk}{cbkE0IpITIGpLDXEQduQ1Q}{172.17.0.3}{172.17.0.3:9300}, reason: zen-disco-join(elected_as_master, [0] joins received)[2016-10-18 06:48:13,276][INFO ][http ] [Wilson Fisk] publish_address {172.17.0.3:9200}, bound_addresses {[::]:9200}[2016-10-18 06:48:13,277][INFO ][node ] [Wilson Fisk] started[2016-10-18 06:48:13,342][INFO ][gateway ] [Wilson Fisk] recovered [0] indices into cluster_state
可以再宿主机器正常访问
➜ ~ curl 127.0.0.1:9200{ "name" : "Wilson Fisk", "cluster_name" : "elasticsearch", "cluster_uuid" : "xTeny0KFRHWNkzbqEIzNSg", "version" : { "number" : "2.4.1", "build_hash" : "c67dc32e24162035d18d6fe1e952c4cbcbe79d16", "build_timestamp" : "2016-09-27T18:57:55Z", "build_snapshot" : false, "lucene_version" : "5.5.2" }, "tagline" : "You Know, for Search"}
同理,我在docker里面配置了redis ,里面默认也是127.0.0.1 ,结果宿主机器无法访问docker端口
。这里根据上面的情况也将redis 配置成0.0.0.0
## Examples:## bind 192.168.1.100 10.0.0.1#bind 127.0.0.1bind 0.0.0.0# Specify the path for the Unix socket that will be used to listen for# incoming connections. There is no default, so Redis will not listen# on a unix socket when not specified.#
后来重启redis ,宿主机器也可以访问了