我是docker和dc / os的新手。我在microsoft azure中部署了dc / os集群。我需要通过jmx将访问权限设置为我的java应用程序,但我不能。 我们以部署标准tomcat图像为例。 我在我的本地机器上安装了docker。要使用jmx访问运行tomcat容器,我使用以下命令:
docker run -e
JAVA_OPTS= "-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=127.0.0.1
-Dcom.sun.management.jmxremote.port=8081
-Dcom.sun.management.jmxremote.rmi.port=8081
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false"
-p 8080:8080 -p 8081:8081 tomcat:8.0
我可以通过端口8081连接到Tomcat。
我尝试在dc / os集群中做同样的事情。我使用下面的json配置来部署:
{
"id": "/tomcat",
"instances": 1,
"cpus": 1,
"mem": 512,
"container": {
"type": "DOCKER",
"docker": {
"image": "tomcat:8.0",
"network": "BRIDGE",
"portMappings": [
{ "protocol": "tcp", "hostPort": 8080, "containerPort": 8080 },
{ "protocol": "tcp", "hostPort": 8081, "containerPort": 8081 }
]
}
},
"requirePorts": true,
"acceptedResourceRoles": [
"slave_public"
],
"env": {
"JAVA_OPTS": "-Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=10.0.0.4 -Dcom.sun.management.jmxremote.port=8081 -Dcom.sun.management.jmxremote.rmi.port=8081 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
},
"healthChecks": [
{
"gracePeriodSeconds": 120,
"intervalSeconds": 30,
"maxConsecutiveFailures": 3,
"path": "/",
"portIndex": 0,
"protocol": "HTTP",
"timeoutSeconds": 5
}
]
}
之后我可以访问tomcat webconsole,但我无法通过jmx连接。 我尝试了“-Djava.rmi.server.hostname”的variouse值:127.0.0.1,10.0.0.4(agent ip),agents.westeurope.cloudapp.azure.com。 请帮我理解我做错了什么。
更新:感谢Walter - MSFT指出了默认情况下在azure上打开哪些端口的事实。我真的忘了它。但是通过jmx连接的问题对我来说仍然是实际的。我开始了新的讨论,我提供了更多细节。 DC/OS JMX Access
答案 0 :(得分:1)
您可以阅读Azure official article:
ACS公共代理程序池中的任何DC / OS容器都是自动的 暴露在互联网上。默认情况下,端口80,443,8080已打开, 并且可以访问在这些端口上侦听的任何(公共)容器。
根据您的描述,似乎端口8081未打开。您可以在Azure门户上打开端口8081。
有关详情,请参阅此链接:Enable public access to an Azure Container Service application。
更新
我在我的实验室用你的json文件测试,它适用于我,你不能改变它。您应该在Azure NSG和Load Balance上打开端口。
我在实验室测试,我可以打开8080 Web UI。当我测试端口8081时,我注意到端口正在侦听,我可以使用公共IP访问端口。
azureuser@dcos-master-01234567-0:~$ netcat -z -v 13.84.176.235 8081
Connection to 13.84.176.235 8081 port [tcp/tproxy] succeeded!
您也可以使用curl进行测试,我得到以下结果。
azureuser@dcos-master-01234567-0:~$ curl 13.84.176.235:8081
curl: (52) Empty reply from server
如果您无法访问8081 Web UI,我建议您最好检查docker容器。