簡體   English   中英

在ECS集群上運行的Docker容器中公開JMX端口

[英]Expose JMX port in a docker Container running on ECS Cluster

我有一個在Docker容器中運行的Java應用程序。 我已將此容器部署在ECS群集中。 我想公開一個JMX端口,以便可以使用安裝在該計算機上的CollectD代理收集JVM統計信息。

我在Java應用程序中指定的JVM參數是

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

如果我在非docker環境中運行此應用程序,則可以連接到此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"
                        }
                    ]
                }

通過各種鏈接后,我找到了解決問題的方法。 最后,JVM參數看起來像這樣

-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對我有用。 您可以根據需要將其設置為true或false。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM