试图在mesosphere marathon平台上部署teamcity构建代理,但在端口Map方面遇到问题。
默认情况下,teamcity服务器将尝试与端口9090上的teamcity代理通话
因此,我将集装箱港口设置为:
“集装箱港口”:9090
但是,当我部署teamcity代理容器时,marathon会将端口9090Map到30000范围内的端口。
当teamcity服务器与端口9090上的容器通信时,由于端口Map到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=9090替换ownport=$port0,然后启动代理。
但是,现在代理位于端口30000上,“containerport”:9090现在无效,它应该是“containerport”:$port0但是这是无效的json,因为containerport应该是一个整数。
我试过设置“containerport”:0,它应该动态地分配一个端口,但是使用这个值我无法让容器启动它,它会立即消失并继续尝试部署它。
我登录到mesos从属主机并运行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版本是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"
}
]
}
}
}
任何帮助都将不胜感激!
1条答案
按热度按时间mwyxok5s1#
从marathon版本0.8.2升级到marathon版本0.9.0解决了这个问题,使用设置“containerport”:0,现在可以正确地动态设置端口,容器启动,teamcity服务器现在可以与其通信。