我有一个docker形象,我想通过Mesos / Marathon推出一些实例。
我在docker使用BRIDGEnetworking,我想通过在容器正在启动,启动容器,通过env的mesos奴隶/docker工人主机的“公共”(即不是容器的docker0networking)地址var或param,所以我可以在应用程序响应中通告这个ip(应用程序是一个Cassandra节点,我将在这个地址中的cassandra.yaml中填充broadcast_address )
我的理解是,我可以让Mesos将此地址上的任何特定端口(在configuration的范围内)转发回运行容器的docker0地址。 如果这是真的,我可以保证应用程序实例(Cassandra节点)没有从这个奴隶移动,有一些约束,我可以有一个mesos预定的Cassandra集群。
我的问题是:我怎么得到奴隶(docker主机)的IP地址到马拉松应用程序实例,因为它正在启动?
在Marathonfind合适的主机之前,您不知道IP地址。 但是,在Mesos从站启动任务时,某些属性存储在ENVvariables中:
... 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
如果主机名MESOS_SLAVE_PID ,可以使用HOSTvariables或从MESOS_SLAVE_PID提取IP地址。
如果使用--ip=192.168.1.2启动mesos-slave ,则HOST和LIBPROCESS_IP ENVvariables将被设置为主机地址。 对于Mesosphere包:
echo "192.168.1.2" > /etc/mesos-slave/ip
并重新启动从机。
还有一个select是解决Docker容器内的代理IP:
AGENT_IP=$(getent hosts ${HOST} | awk '{ print $1 }')