我已经成功部署了marathon / mesos应用程序,但是如果我添加端口映射,它就不再起作用了。
我的奴隶容器运行为:
docker run --privileged -v /data/docker/notebook:/notebook:rw -v /etc/localtime:/etc/localtime:ro --net=host -e NFS_PATH=$NFS_PATH -e IP=$IP -e RESOURCES=$RESOURCES -e ATTRIBUTES=$ATTRIBUTES -e HOSTNAME=$HOSTNAME -e MASTER=$MASTER -e SLAVE_PORT=$SLAVE_PORT -d -p 5151:5151 --name $CONTAINER_NAME $IMAGE_NAME
然后在奴隶容器中我必须手动启动守护进程因为一个奇怪的[时间=" 2015-10-17T12:27:40.963674511Z" level = fatal msg ="启动守护程序时出错:初始化graphdriver时出错:操作不允许"]错误,所以我这样做:
docker -d -D --insecure-registry=localhost:5000 -g /var/test
然后我在Mesos上看到我的奴隶作为工作资源,我可以将一些应用程序发布到马拉松:
{
"id": "rstudiorocker2",
"container": {
"type" : "DOCKER",
"volumes" : [],
"docker" : {
"image" : "localhost:5000/rocker/rstudio",
"privileged" : true,
"parameters" : [],
"forcePullImage" : true
}
}
}
此处应用程序即时部署在从属设备上。问题是摇杆正在侦听端口8787,我想在另一个端口上访问它,所以我尝试进行端口映射:
{
"id": "rstudiorocker",
"container": {
"type" : "DOCKER",
"volumes" : [],
"docker" : {
"image" : "192.168.0.38:5000/rocker/rstudio",
"privileged" : true,
"parameters" : [],
"forcePullImage" : true,
"network":"BRIDGE",
"portMappings": [
{ "containerPort": 8787,
"hostPort": 2036,
"protocol": "tcp" }
, { "containerPort": 8787,
"hostPort": 2036,
"protocol": "udp" }
]}
}
}
这里出现问题:应用程序停留在"停滞不前"阶段,从未被部署(即使我先删除所有其他应用程序):( 可能出现什么问题?
答案 0 :(得分:0)
您已尝试将相同的容器端口映射两次,这是Marathon不允许的:
"portMappings": [
{ "containerPort": 8787,
"hostPort": 2036,
"protocol": "tcp" },
{ "containerPort": 8787,
"hostPort": 2036,
"protocol": "udp" }
]}
Marathon将使用
之类的消息拒绝此配置{"message":"Bean is not valid","errors":[{"attribute":"ports","error":"Elements must be unique"}]}
尝试更改其中一个containerPort值,例如:
"portMappings": [
{ "containerPort": 8787,
"hostPort": 0,
"protocol": "tcp" },
{ "containerPort": 8789,
"hostPort": 0,
"protocol": "udp" }
]}