Ah, learned something new. I've updated my iptables to accept tcp and udp
for 9200:9400. However, I'm still running into the same error. I'm still
getting the earlier mentioned error message when using the container's IP
(not ideal). When I use the following unicast list on the host:
host: discovery.zen.ping.unicast.hosts: ["172.17.42.1:9200", "
172.17.42.1:9201"]
I get the following on the host and the associated exception on the
container:
[2014-07-14 11:48:50,357][WARN ][discovery.zen.ping.unicast]
[elasticsearch-node-00] failed to send ping to
[[#zen_unicast_2#][elasticsearch-node-00][inet[/172.17.42.1:9201]]]
org.elasticsearch.transport.ReceiveTimeoutTransportException:
[][inet[/172.17.42.1:9201]][discovery/zen/unicast] request_id [0] timed out
after [3751ms]
at
org.elasticsearch.transport.TransportService$TimeoutHandler.run(TransportService.java:356)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
I'm pretty sure this is an issue with my iptables config. I don't get the
stack traces on the container after flushing my iptable rules but I do
still receive the above error message on the host. I'm wondering if it has
something to do with these two lines that docker adds to my iptables rules
0 0 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0
172.17.0.2 tcp dpt:9300
0 0 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0
172.17.0.2 tcp dpt:9200
Do I need to manually add additional rules to allow the host to discover
the container?
On Monday, July 14, 2014 9:48:58 AM UTC-4, Jörg Prante wrote:
>
> curl uses TCP, but for multicast/unicast, you need also UDP.
>
> Jörg
>
>
> On Mon, Jul 14, 2014 at 3:13 PM, Tony P. <[email protected] <javascript:>
> > wrote:
>
>> I've tried a few different things to no avail.
>>
>> Current setup:
>> # vain effort to attempt to have the host find the node in the docker
>> container
>> host: discovery.zen.ping.unicast.hosts: ["127.0.0.1", "172.17.0.14"]
>> container: discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
>> # Which won't be particularly effective since the next time I restart the
>> docker container its IP will change.
>>
>> I've also tried:
>> # accessing the host from the docker container
>> host: discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
>> container: discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
>>
>> # having the host use the docker0 bridge which theoretically should have
>> worked since I mapped 9201 on docker0 to 9200 on the docker container
>> host: discovery.zen.ping.unicast.hosts: ["172.17.42.1:9200", "
>> 172.17.42.1:9201"]
>>
>> # same as above except using the host's actual IP and the same port
>> mapping across docker0
>> host: discovery.zen.ping.unicast.hosts: ["xxx.xxx.222.206:9200",
>> "xxx.xxx.222.206:9201"]
>>
>> I can curl all of these IPs at 9200/9201 and get a response from the
>> desired ES node.
>>
>> On Friday, July 11, 2014 7:16:17 PM UTC-4, Mark Walkom wrote:
>>
>>> ES will try to connect via unicast based on whatever you have in your
>>> config.
>>> What does the discovery.zen.ping.unicast line look like?
>>>
>>> Regards,
>>> Mark Walkom
>>>
>>> Infrastructure Engineer
>>> Campaign Monitor
>>> email: [email protected]
>>> web: www.campaignmonitor.com
>>>
>>>
>>> On 12 July 2014 05:00, Tony P. <[email protected]> wrote:
>>>
>>>> I've been playing with Elasticsearch and had a working cluster in a
>>>> multicast environment using VMs. I recently tried adapting that to work
>>>> within Docker and I'm running into a wall with the unicast configuration.
>>>>
>>>> Current setup is two nodes: one on the host and another in a docker
>>>> container (dockerfile/elasticsearch)
>>>>
>>>> I'm running the container with:
>>>> $ docker run -d -h "elasticsearch-node-01"
>>>> --name="elasticsearch-node-01" \
>>>> -p 9201:9200 -p 9301:9300 -v \
>>>> /etc/elasticsearch/cluster/:/data \
>>>> dockerfile/elasticsearch /elasticsearch/bin/elasticsearch \
>>>> -Des.config=/data/elasticsearch.yml
>>>>
>>>> It spins up on the docker0 bridge with some IP, 172.17.0.xx
>>>> docker0 is bound to 172.17.42.1
>>>> 127.0.0.1 refers to the host in this example
>>>>
>>>> I can access the elasticsearch node in the container with any of the
>>>> commands:
>>>> $ curl 127.0.0.1:9201
>>>> $ curl 172.17.42.1:9201
>>>> $ curl 172.17.0.xx:9200
>>>>
>>>> But when I add it to a cluster via unicast, I see an exception thrown
>>>> with "No route to host" being the reason.
>>>>
>>>> After trying a few different IPs to see which could be accessed through
>>>> the bridge, it seems that the container doesn't know how to speak to the
>>>> host to join the host node's cluster or tell the host node that it has a
>>>> cluster that can be joined. The host node logs also shows a similar error:
>>>>
>>>> [2014-07-10 12:00:37,264][INFO][discovery.zen]
>>>> [elasticsearch-node-test] failed to send join request to master
>>>> [[elasticsearch-node-01][I3LiEOyeSome3djzr37uuQ][
>>>> elasticsearch-node-01][inet[/172.17.0.14:9300]]], reason
>>>> [org.elasticsearch.transport.RemoteTransportException:
>>>> [elasticsearch-node-01][inet[/172.17.0.14:9300]][discovery/zen/join];
>>>> org.elasticsearch.transport.ConnectTransportException:
>>>> [elasticsearch-node-test][inet[/128.59.222.215:9300]]
>>>> connect_timeout[30s]; java.net.NoRouteToHostException: No route to
>>>> host]
>>>>
>>>> There are two conversations I've found here with docker, elasticsearch
>>>> and unicast but neither provide an answer to my issue:
>>>> https://groups.google.com/d/msg/elasticsearch/OsGJcxuW1vI/qybPOrgE4fMJ
>>>> https://groups.google.com/d/msg/elasticsearch/2p9jXbCwRC8/mm4BPt5iQfgJ
>>>>
>>>> Any ideas on what I'm doing wrong? Is it because elasticsearch is
>>>> attempting to search based on the node's hostname (elasticsearch-node-01)
>>>> instead of the IP address? The hostname, elasticsearch-node-01 isn't valid
>>>> since it's just generated by passing it to docker. Should I use the IP as
>>>> the hostname if that's what ES is using to add the node to the cluster?
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "elasticsearch" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>>
>>>> To view this discussion on the web visit https://groups.google.com/d/
>>>> msgid/elasticsearch/d52a92e3-0956-48b6-8816-cea5ed31a412%
>>>> 40googlegroups.com
>>>> <https://groups.google.com/d/msgid/elasticsearch/d52a92e3-0956-48b6-8816-cea5ed31a412%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>> --
>> You received this message because you are subscribed to the Google Groups
>> "elasticsearch" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected] <javascript:>.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/elasticsearch/a6f26f35-9b9e-44e6-9392-8f1bdfb2b1ea%40googlegroups.com
>>
>> <https://groups.google.com/d/msgid/elasticsearch/a6f26f35-9b9e-44e6-9392-8f1bdfb2b1ea%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
--
You received this message because you are subscribed to the Google Groups
"elasticsearch" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/elasticsearch/a49267e3-89b9-461d-8307-693b4ca82ab2%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.