2017-09-14 164 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。

相關問題