2017-09-14 2 views
1

J'ai une application Java qui s'exécute dans un conteneur docker. J'ai déployé ce conteneur dans un cluster ECS. Je veux exposer un port JMX afin que je puisse collecter des statistiques JVM en utilisant l'agent CollectD installé sur cette machine.Expose le port JMX dans un docker Conteneur s'exécutant sur le cluster ECS

La machine virtuelle Java params que je l'ai indiqué dans mon application Java sont

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 

Je suis en mesure de se connecter à ce port JMX si je lance cette application dans un environnement non docker. Cependant, je suis incapable de faire la même chose dans Docker.

J'ai également donné des mappages de ports dans My Task Definition afin que ce port puisse être exposé au monde extérieur. Je sais, si j'exécutais ce docker en utilisant la commande docker run que j'aurais pu spécifier -p param pour le mappage des ports, mais je ne peux pas faire la même chose ici car je lance cette application sur un cluster ECS qui déploie cette image. Je dois donc compter sur les mappages de port fournis par la définition de tâche.

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

Afficher la définition de la tâche –

+0

Mise à jour de la question –

Répondre

0

Après avoir traversé divers liens que je trouve la solution à mon problème. Enfin, le regard de JVM comme celui-ci

-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 

Ajout -Dcom.sun.management.jmxremote.local.only = true a fait l'affaire pour moi. Vous pouvez le définir sur true ou false selon vos besoins.