我有一个Web应用程序,具有以下应用程序定义和DCOS,并在部署了marathon-lb的Azure云上运行。当我将以下内容添加为服务时。
{
"id": "web",
"container": {
"type": "DOCKER",
"docker": {
"image": "myimage",
"network": "BRIDGE",
"portMappings": [
{ "hostPort": 5000, "containerPort": 5000, "servicePort": 0 }
],
"forcePullImage":true
}
},
"instances": 1,
"cpus": 0.1,
"mem": 614,
"labels":{
"HAPROXY_GROUP":"external",
"HAPROXY_0_VHOST":"localhost",
"HAPROXY_0_MODE":"http"
}
}
只有保持containerPort和hostPort相同,我才能通过浏览器访问我的应用程序。
如果将hostPort更改为0,则无法访问该应用程序。 我需要将hostPort设置为0,这样我才能扩展应用程序,它将为应用程序分配免费的hostPort。 请问这里有什么问题?
答案 0 :(得分:0)
hostPort
等于0表示您的应用程序将盯着Mesos分配的随机端口。参见this answer
您不需要保持hostPort
和containerPort
相等。 containerPort
必须与正在侦听的端口应用程序匹配。 hostPort
可以是任何端口(这就是为什么您应该使用0的原因)。然后,Containerizer将发送到您hostPost
或从您的containertPort
发送的数据包传递到容器内的public class DrDrawerListAdapter extends BaseAdapter {
Activity activity;
int[] imageId;
private LayoutInflater inflater = null;
ArrayList<String> titles;
public DrDrawerListAdapter(Activity activity, ArrayList<String> titles, int[] icons){
this.titles= titles;
this.activity = activity;
this.imageId = icons;
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return titles.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Holder holder = new Holder();
View view = inflater.inflate(R.layout.dr_drawer_item, null);
holder.iconView = view.findViewById(R.id.im_icon);
holder.titleView = view.findViewById(R.id.tv_title);
holder.titleView.setText(titles.get(position));
Glide.with(activity.getApplicationContext()).load(imageId[position]).into(holder.iconView);
return view;
}
public class Holder{
ImageView iconView;
TextView titleView;
}
。