У меня есть приложение Java, работающее внутри контейнера докеров. Я развернул этот контейнер в кластере ECS. Я хочу открыть порт JMX, чтобы я мог собирать статистику JVM с помощью агента CollectD, установленного на этом компьютере.
Параметры JVM, которые я указал в своем приложении 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, то я мог бы указать параметр -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"
}
]
}