You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@mesos.apache.org by Ankur Chauhan <an...@malloc64.com> on 2014/10/27 02:39:26 UTC

Exposing host services in docker container

Hi all,

So I have been dabbling with docker containers in and mesos. I have the following scenario and i was wondering if someone had experience with something like this.

I have a bunch of dockerized apps running and the slave hosts have some common services running, something like mongos and kafka brokers etc. I was wondering if there was a way to expose these services (i.e. some tcp port) to the docker containers?

Is this even a legitimate way of exposing services to apps but my main intention is to avoid going over the network or something.

-- Ankur

Re: Exposing host services in docker container

Posted by Ankur Chauhan <an...@malloc64.com>.
Thanks that actually got me where i wanted to get to (with a little more workaround):
If I start a docker container like this

docker run -it --rm dockerfile/mongodb bash -c "HOST_IP=`/sbin/ip route|awk '/default/ { print $3 }'` mongo --host $HOST_IP:27017"

I get the correct behaviour. I think I should be able to get it going now. Although maybe exposing the slave host ip inside the container may not be a bad idea.

-- Ankur

> On 27 Oct 2014, at 00:14, Tim Chen <ti...@mesosphere.io> wrote:
> 
> Hi Ankur,
> 
> You can't access host via 'localhost' in a docker container since localhost (127.0.0.1) is just the loopback that is in the container and not to your host.
> However since docker automatically creates the bridge for you that connects the container and host, you can access the host by it's ip from the container.
> 
> Try the following instead:
> HOST_IP=`hostname -i`
> docker run -it --rm dockerfile/mongodb bash -c "mongo --host $HOST_IP:27017"
> 
> Tim
> 
> On Sun, Oct 26, 2014 at 11:28 PM, Ankur Chauhan <ankur@malloc64.com <ma...@malloc64.com>> wrote:
> Hi Tim,
> 
> Thanks for the reply.
> 
> Yes these are services that are running on all the nodes. Imagine it like this: All slave hosts have a mongos running on 27017, a kafka broker, etc always running. I think I just don't know how to access them from within the container? My perception is that accessing localhost:27017 from within the container doesn't connect to the hosts' localhost:27017. If that is possible, how do i do it? I started a mongos on 27017 but when i tried the command 
> `docker run -it --rm dockerfile/mongodb bash -c 'mongo --host localhost:27017'` it was unable to connect.
> 
> -- Ankur
> 
>> On 26 Oct 2014, at 21:12, Tim Chen <tim@mesosphere.io <ma...@mesosphere.io>> wrote:
>> 
>> Hi Ankur,
>> 
>> Not sure I understand exactly, are these common services all running on the same host where you're running the container?
>> 
>> If it's running the same host, docker container should be able to access any port in the host, if it's cross hosts then you have to setup your own bridge and use the lxc-conf option, or use something like pipework.
>> 
>> I'm adding the lxc-conf options into the next release of mesos.
>> 
>> Tim
>> 
>> On Sun, Oct 26, 2014 at 6:39 PM, Ankur Chauhan <ankur@malloc64.com <ma...@malloc64.com>> wrote:
>> Hi all,
>> 
>> So I have been dabbling with docker containers in and mesos. I have the following scenario and i was wondering if someone had experience with something like this.
>> 
>> I have a bunch of dockerized apps running and the slave hosts have some common services running, something like mongos and kafka brokers etc. I was wondering if there was a way to expose these services (i.e. some tcp port) to the docker containers?
>> 
>> Is this even a legitimate way of exposing services to apps but my main intention is to avoid going over the network or something.
>> 
>> -- Ankur
>> 
> 
> 


Re: Exposing host services in docker container

Posted by Tim Chen <ti...@mesosphere.io>.
Hi Ankur,

You can't access host via 'localhost' in a docker container since localhost
(127.0.0.1) is just the loopback that is in the container and not to your
host.
However since docker automatically creates the bridge for you that connects
the container and host, you can access the host by it's ip from the
container.

Try the following instead:
HOST_IP=`hostname -i`
docker run -it --rm dockerfile/mongodb bash -c "mongo --host $HOST_IP:27017"

Tim

On Sun, Oct 26, 2014 at 11:28 PM, Ankur Chauhan <an...@malloc64.com> wrote:

> Hi Tim,
>
> Thanks for the reply.
>
> Yes these are services that are running on all the nodes. Imagine it like
> this: All slave hosts have a mongos running on 27017, a kafka broker, etc
> always running. I think I just don't know how to access them from within
> the container? My perception is that accessing localhost:27017 from within
> the container doesn't connect to the hosts' localhost:27017. If that is
> possible, how do i do it? I started a mongos on 27017 but when i tried the
> command
> `docker run -it --rm dockerfile/mongodb bash -c 'mongo --host
> localhost:27017'` it was unable to connect.
>
> -- Ankur
>
> On 26 Oct 2014, at 21:12, Tim Chen <ti...@mesosphere.io> wrote:
>
> Hi Ankur,
>
> Not sure I understand exactly, are these common services all running on
> the same host where you're running the container?
>
> If it's running the same host, docker container should be able to access
> any port in the host, if it's cross hosts then you have to setup your own
> bridge and use the lxc-conf option, or use something like pipework.
>
> I'm adding the lxc-conf options into the next release of mesos.
>
> Tim
>
> On Sun, Oct 26, 2014 at 6:39 PM, Ankur Chauhan <an...@malloc64.com> wrote:
>
>> Hi all,
>>
>> So I have been dabbling with docker containers in and mesos. I have the
>> following scenario and i was wondering if someone had experience with
>> something like this.
>>
>> I have a bunch of dockerized apps running and the slave hosts have some
>> common services running, something like mongos and kafka brokers etc. I was
>> wondering if there was a way to expose these services (i.e. some tcp port)
>> to the docker containers?
>>
>> Is this even a legitimate way of exposing services to apps but my main
>> intention is to avoid going over the network or something.
>>
>> -- Ankur
>
>
>
>

Re: Exposing host services in docker container

Posted by Ankur Chauhan <an...@malloc64.com>.
Hi Tim,

Thanks for the reply.

Yes these are services that are running on all the nodes. Imagine it like this: All slave hosts have a mongos running on 27017, a kafka broker, etc always running. I think I just don't know how to access them from within the container? My perception is that accessing localhost:27017 from within the container doesn't connect to the hosts' localhost:27017. If that is possible, how do i do it? I started a mongos on 27017 but when i tried the command 
`docker run -it --rm dockerfile/mongodb bash -c 'mongo --host localhost:27017'` it was unable to connect.

-- Ankur

> On 26 Oct 2014, at 21:12, Tim Chen <ti...@mesosphere.io> wrote:
> 
> Hi Ankur,
> 
> Not sure I understand exactly, are these common services all running on the same host where you're running the container?
> 
> If it's running the same host, docker container should be able to access any port in the host, if it's cross hosts then you have to setup your own bridge and use the lxc-conf option, or use something like pipework.
> 
> I'm adding the lxc-conf options into the next release of mesos.
> 
> Tim
> 
> On Sun, Oct 26, 2014 at 6:39 PM, Ankur Chauhan <ankur@malloc64.com <ma...@malloc64.com>> wrote:
> Hi all,
> 
> So I have been dabbling with docker containers in and mesos. I have the following scenario and i was wondering if someone had experience with something like this.
> 
> I have a bunch of dockerized apps running and the slave hosts have some common services running, something like mongos and kafka brokers etc. I was wondering if there was a way to expose these services (i.e. some tcp port) to the docker containers?
> 
> Is this even a legitimate way of exposing services to apps but my main intention is to avoid going over the network or something.
> 
> -- Ankur
> 


Re: Exposing host services in docker container

Posted by Tim Chen <ti...@mesosphere.io>.
Hi Ankur,

Not sure I understand exactly, are these common services all running on the
same host where you're running the container?

If it's running the same host, docker container should be able to access
any port in the host, if it's cross hosts then you have to setup your own
bridge and use the lxc-conf option, or use something like pipework.

I'm adding the lxc-conf options into the next release of mesos.

Tim

On Sun, Oct 26, 2014 at 6:39 PM, Ankur Chauhan <an...@malloc64.com> wrote:

> Hi all,
>
> So I have been dabbling with docker containers in and mesos. I have the
> following scenario and i was wondering if someone had experience with
> something like this.
>
> I have a bunch of dockerized apps running and the slave hosts have some
> common services running, something like mongos and kafka brokers etc. I was
> wondering if there was a way to expose these services (i.e. some tcp port)
> to the docker containers?
>
> Is this even a legitimate way of exposing services to apps but my main
> intention is to avoid going over the network or something.
>
> -- Ankur