2

https://docker.somedomain.com (5000 ではなく標準ポート 443 経由)でアクセスできるプライベート Docker レジストリがあります。私のインフラストラクチャには、docker コンテナー化が有効になっている Mesosphere のセットアップが含まれています。Marathon 経由で特定のコンテナーを Mesos スレーブにデプロイしようとしています。ただし、これは常に Mesos がそのサンドボックスの stderr と stdout にデータがなく、ほぼ即座にタスクを失敗させて失敗します。

標準の Docker レジストリのイメージからデプロイしようとしましたが、うまく動作しているようです。何が悪いのかわからなくて困っています。私のプライベート Docker レジストリはパスワード認証を必要としません (これをデバッグするためにオフにします)。また、Meso のスレーブ インスタンスにシェルでアクセスし、root として sudo su を実行すると、「docker pull docker.somedomain.com/services/myapp」を実行できます。毎回成功。

タスクを開始するためのマラソン投稿データは次のとおりです。

{
  "id": "myapp",
  "cpus": 0.5,
  "mem": 64.0,
  "instances": 1,
  "container": {
    "type": "DOCKER",
    "docker": {
      "image": "docker.somedomain.com/services/myapp:2",
      "network": "BRIDGE",
      "portMappings": [
        { "containerPort": 7000, "hostPort": 0, "servicePort": 0, "protocol": "tcp" }
      ]
    },
    "volumes": [
      {
        "containerPath": "application.yml",
        "hostPath": "/var/myapp/application.yml",
        "mode": "RO"
      }
    ]
  },
  "healthChecks": [
    {
      "protocol": "HTTP",
      "portIndex": 0,
      "path": "/",
      "gracePeriodSeconds": 5,
      "intervalSeconds": 20,
      "maxConsecutiveFailures": 3
    }
  ]
}   

私はこれでほぼ1日立ち往生しており、私が試したすべてが同じ結果をもたらしているようです。これに関する洞察は大歓迎です。

私のバージョン: Mesos: 0.22.1 Marathon: 0.8.2 Docker: 1.6.2

4

3 に答える 3

2

したがって、これはボリュームの問題であることが判明しました

"volumes": [
      {
        "containerPath": "/application.yml",
        "hostPath": "/var/myapp/application.yml",
        "mode": "RO"
      }
    ]

ルート パスのコンテナーのルート パスを使用することは docker では合法かもしれませんが、Mesos はこの動作を処理していないようです。containerPath を非ルート パスに変更すると、これが解決されます。つまり、

"volumes": [
      {
        "containerPath": "/var",
        "hostPath": "/var/myapp",
        "mode": "RW"
      }
    ]
于 2015-06-26T14:31:35.993 に答える
0

Marathon とレジストリの間の問題である場合、答えはレジストリの http ログにあるはずです。Marathon が接続すると、エントリがあります。また、Mesos マスター ログにも手がかりが含まれているはずです。

ただし、Marathon と Registry の間の問題のようには思えません。/etc/mesos-slave/containerizers に 'docker,mesos' がありますか?

于 2015-06-26T08:41:42.223 に答える
0

認証がないにもかかわらず、 Using a Private Docker Repository を実行しようとしましたか?

プライベート リポジトリからプルする資格情報を提供するには、アプリの uris フィールドに .dockercfg を追加します。$HOME 環境変数は $MESOS_SANDBOX と同じ値に設定されるため、Docker は構成ファイルを自動的に取得できます。

于 2015-06-26T11:21:47.723 に答える