2

我有一个私有 Docker 注册表,可通过https://docker.somedomain.com访问(通过标准端口 443 而不是 5000)。我的基础设施包括一套 Mesosphere,它启用了 docker containerizer。我正在尝试通过 Marathon 将特定容器部署到 Mesos 从站;但是,这总是失败,因为 Mesos 几乎立即失败了任务,并且该沙箱的 stderr 和 stdout 中没有数据。

我尝试从标准 Docker Registry 中的映像进行部署,它似乎工作正常。我很难弄清楚出了什么问题。我的私有 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
    }
  ]
}   

我已经坚持了将近一天,我尝试过的一切似乎都产生了相同的结果。对此的任何见解将不胜感激。

我的版本: 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 日志中。如果马拉松连接,将有一个条目。Mesos 主日志也应该包含一条线索。

不过,这听起来不像是 Marathon 和 Registry 之间的问题。你确定你在 /etc/mesos-slave/containerizers 中有 'docker,mesos' 吗?

于 2015-06-26T08:41:42.223 回答
0

尽管没有身份验证,但您是否尝试遵循使用私有 Docker 存储库

要提供从私有存储库中提取的凭据,请将 .dockercfg 添加到应用程序的 uris 字段。然后 $HOME 环境变量将设置为与 $MESOS_SANDBOX 相同的值,以便 Docker 可以自动获取配置文件。

于 2015-06-26T11:21:47.723 回答