0

Mesosphere Marathon プラットフォームに teamcity ビルド エージェントをデプロイしようとしていて、ポート マッピングに問題があります。

デフォルトでは、teamcity サーバーはポート 9090 で teamcity エージェントと通信しようとします。

そのため、コンテナ ポートを次のように設定します。

「コンテナ ポート」: 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=9090 が ownPort=$PORT0 に置き換えられ、エージェントが開始されます。

ただし、エージェントがポート 30000 にあるため、"containerPort": 9090 は無効になりました。"containerPort": $PORT0 である必要がありますが、containerPort は整数である必要があるため、これは無効な json です。

ポートを動的に割り当てる必要がある "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 のバージョンは 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"
                }
            ]
        }
    }

}

どんな助けでも大歓迎です!

4

1 に答える 1

0

Marathon バージョン 0.8.2 から Marathon バージョン 0.9.0 にアップグレードすると、設定 "containerPort": 0 を使用して問題が修正され、ポートが動的に適切に設定され、コンテナーが起動し、teamcity サーバーが通信できるようになりました。

于 2015-07-16T23:05:53.203 に答える