在 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 服务器现在可以通信有了它。