我有一个私有(private) Docker 注册表,可通过 https://docker.somedomain.com 访问。 (通过标准端口 443 而不是 5000)。我的基础设施包括一套 Mesosphere,它启用了 docker 容器化程序。我正在尝试通过 Marathon 将特定容器部署到 Mesos 从属服务器;然而,这总是会失败,Mesos 几乎立即失败任务,并且该沙箱的 stderr 和 stdout 中没有数据。
我尝试从标准 Docker 注册表中的镜像进行部署,它似乎工作正常。我很难弄清楚出了什么问题。我的私有(private) 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
}
]
}
我已经被困在这个问题上几乎一天了,我尝试过的一切似乎都产生了相同的结果。任何对此的见解将不胜感激。
我的版本: 梅索斯:0.22.1 马拉松:0.8.2 docker :1.6.2
最佳答案
所以这证明是卷的问题
"volumes": [
{
"containerPath": "/application.yml",
"hostPath": "/var/myapp/application.yml",
"mode": "RO"
}
]
使用根路径的容器的根路径在docker中可能是合法的,但Mesos似乎不处理这种行为。将containerPath修改为非根路径可以解决这个问题,即
"volumes": [
{
"containerPath": "/var",
"hostPath": "/var/myapp",
"mode": "RW"
}
]
关于docker - Mesos 无法从私有(private) Docker 注册表部署容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31057910/