2017-09-14 170 views
1

我有一个在Docker容器中运行的Java应用程序。我已经在ECS集群中部署了这个容器。我想公开一个JMX端口,以便我可以使用安装在该机器上的CollectD代理收集JVM统计信息。在Docker容器中公开JMX端口容器在ECS集群上运行

的JVM PARAMS,我在我的Java应用程序指定的

JAVA_OPTS="-Dspring.config.location=classpath:/base/ -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8008 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=10.0.7.118 

我能够连接到这个端口JMX如果我运行在非泊坞窗环境这个应用程序。但是,我无法在Docker中做同样的事情。

我也在我的任务定义中给出了端口映射,所以这个端口可以暴露给外部世界。我知道,如果我使用docker run命令运行此docker,而不是我可以为端口映射指定-p参数,但我无法在此处执行此操作,因为我在部署此映像的ECS群集上运行此应用程序。所以我必须依赖任务定义提供的端口映射。

TaskDefnition

  "ContainerDefinitions": [ 
       { 
        "Name": "MyApplication", 
        "Cpu": "2048", 
        "Essential": "true", 
        "Image": "location of the image", 
        "Memory": "8192", 
        "MemoryReservation": "4096", 
        "Environment": [ 
         { 
          "Name": "Test", 
          "Value": { 
           "Fn::GetAtt": [ 
            "SomeAttrib", 
            "SomeAccessKey" 
           ] 
          } 
         } 
        ], 
        "PortMappings": [ 
         { 
          "HostPort": "8080", 
          "ContainerPort": "8080" 
         }, 
         { 
          "HostPort": "8008", 
          "ContainerPort": "8008" 
         } 
        ] 
       } 
+0

发布任务定义 –

+0

更新了问题 –

回答

0

通过各个环节去后,我找到了解决我的问题。最后,JVM PARAMS这个样子的

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8008 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.net.preferIPv4Stack=true -Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.rmi.port=8008 -Dcom.sun.management.jmxremote.local.only=true 

添加-Dcom.sun.management.jmxremote.local.only =真奏效了我。您可以根据您的要求将其设置为true或false。

相关问题