2

i have a docker image i would like to launch a couple instances of via Mesos/Marathon.

i'm using BRIDGE networking in docker, and i would like to pass in the "public" ( i.e. not the container's docker0 net ) address of the mesos slave / docker host the container is being started on, to the starting container, via env var or param, so i can advertise this ip in application responses ( the application is a Cassandra node, and i will populate broadcast_address in cassandra.yaml with this address )

My understanding is that i can have Mesos forward any particular port ( within a configured range ) on this address back to the docker0 address of my running container. If this is true, and i can assure that the application instance ( Cassandra node ) does not get moved off this slave, with a couple constraints, i can have a mesos-scheduled Cassandra cluster.

My question is : how do i get the slave(docker host) ip address in to the Marathon application instance as it is being launched?

pgn
  • 213
  • 2
  • 10

1 Answers1

1

You don't know the IP address before Marathon finds suitable host for the task. However, at the time of launching a task at Mesos slave some properties are stored in ENV variables:

...
ULIMIT=-n 8192
HOST=slave01.example.com
MESOS_SLAVE_PID=slave(1)@192.168.1.2:5051
MARATHON_APP_RESOURCE_CPUS=0.1
MESOS_TASK_ID=dummy.eb6e1d9a-c2f0-11e5-a58b-00259057db2f

If you're fine with hostname, you can use HOST variable or extract the IP address from MESOS_SLAVE_PID.

If you start mesos-slave with --ip=192.168.1.2, then both HOST and LIBPROCESS_IP ENV variable will be set to host's address. For Mesosphere package:

echo "192.168.1.2" > /etc/mesos-slave/ip

and restart slave.

Yet another option is to resolve agent's IP inside Docker container:

AGENT_IP=$(getent hosts ${HOST} | awk '{ print $1 }')
Tombart
  • 2,013
  • 3
  • 27
  • 47
  • unfortunately i do not see this env var in or outside the docker container. I'm on mesos 0.27. The closest thing i see outside is MESOS_SLAVE_PID=slave(1)@192.168.0.113:5051 which i can probably pass in to the container and parse it for an address – pgn Feb 15 '16 at 09:54
  • 1
    Mesos version doesn't matter, I'm sure that any version >= 0.22 is fine. I've updated the answer. You can also use the `HOST` variable which will be set to `hostname -f` unless you set `--ip` flag. – Tombart Feb 15 '16 at 12:54