在 Marathon 中设置 Team City Build Agent 端口号
Setting Team City Build Agent Port Number in Marathon
尝试在 Mesosphere Marathon 平台上部署 teamcity 构建代理,但遇到端口映射问题。
默认情况下,teamcity 服务器将尝试与端口 9090 上的 teamcity 代理通信
因此我这样设置容器端口:
"containerPort": 9090
然而,当我部署 teamcity 代理容器时,Marathon maps 端口 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=9090 换成 ownPort=$PORT0,然后启动代理。
但是现在代理在端口 30000 上 "containerPort": 9090 现在无效,它应该是 "containerPort": $PORT0 然而这是无效的 json 因为 containerPort 应该是一个整数。
我已经尝试设置 "containerPort": 0 应该动态分配一个端口,但是使用这个值我无法让容器启动它只是立即消失并且 keeps 试图部署它.
我登录到 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"
}
]
}
}
}
如有任何帮助,我们将不胜感激!
从 Marathon 版本 0.8.2 升级到 Marathon 版本 0.9.0 解决了这个问题,使用设置 "containerPort": 0,现在可以正确地动态设置端口并且容器启动并且 teamcity 服务器现在可以通信有了它。
尝试在 Mesosphere Marathon 平台上部署 teamcity 构建代理,但遇到端口映射问题。
默认情况下,teamcity 服务器将尝试与端口 9090 上的 teamcity 代理通信
因此我这样设置容器端口:
"containerPort": 9090
然而,当我部署 teamcity 代理容器时,Marathon maps 端口 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=9090 换成 ownPort=$PORT0,然后启动代理。
但是现在代理在端口 30000 上 "containerPort": 9090 现在无效,它应该是 "containerPort": $PORT0 然而这是无效的 json 因为 containerPort 应该是一个整数。
我已经尝试设置 "containerPort": 0 应该动态分配一个端口,但是使用这个值我无法让容器启动它只是立即消失并且 keeps 试图部署它.
我登录到 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"
}
]
}
}
}
如有任何帮助,我们将不胜感激!
从 Marathon 版本 0.8.2 升级到 Marathon 版本 0.9.0 解决了这个问题,使用设置 "containerPort": 0,现在可以正确地动态设置端口并且容器启动并且 teamcity 服务器现在可以通信有了它。