尝试在Mesosphere Marathon平台上部署teamcity构建代理,并且遇到端口映射问题。
默认情况下,teamcity服务器将尝试与端口9090上的teamcity代理进行通信
因此我像这样设置容器端口:
“containerPort”:9090
但是,当我部署teamcity代理容器时,Marathon将端口9090映射到30000范围内的端口。
当teamcity服务器在端口9090上回访容器时,它会失败,因为端口映射到30000.
我已经想出如何通过在marathon args中运行以下sed命令将此动态端口放入teamcity配置文件中:
"args": ["sh", "-c", "sed -i -- \"s/ownPort=9090/ownPort=$PORT0/g\" buildAgent.properties; bin/agent.sh run"],
当容器旋转时,它将在buildAgent.properties中为ownPort = $ PORT0换出ownPort = 9090,然后启动代理。
但是现在代理在端口30000上“containerPort”:9090现在无效,它应该是“containerPort”:$ PORT0但是这是无效的json,因为containerPort应该是一个整数。
我已经尝试设置“containerPort”:0应该动态分配一个端口,但是使用这个值我无法让容器启动它就会立即消失并继续尝试部署它。
我登录到mesos slave主机并运行docker ps -a我可以看到容器端口是空白的:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28*********0 teamcityagent "\"sh -c 'sed -i -- 7 minutes ago Exited (137) 2 minutes ago mes************18a8
这是我使用的Marathon json文件,Marathon版本是Version 0.8.2:
{
"id": "teamcityagent",
"args": ["sh", "-c", "sed -i -- \"s/ownPort=9090/ownPort=$PORT0/g\" buildAgent.properties; bin/agent.sh run"],
"cpus": 0.05,
"mem": 4000.0,
"instances": 1,
"container":
{
"type": "DOCKER",
"docker":
{
"image": "teamcityagent",
"forcePullImage": true,
"network": "BRIDGE",
"portMappings":
[
{
"containerPort": 0,
"hostPort": 0,
"servicePort": 0,
"protocol": "tcp"
}
]
}
}
}
非常感谢任何帮助!
答案 0 :(得分:0)
从Marathon版本0.8.2升级到Marathon版本0.9.0解决了这个问题,使用设置“containerPort”:0,现在可以正确动态设置端口,容器启动,团队服务器现在可以与之通信。 / p>