如何将JMX从主机连接到Docker机器中的Docker容器?

史蒂文森

当我直接在主机上运行Docker容器时,可以毫无问题地连接到它。

我的主机的网络为192.168.1.0/24,主机的IP地址为192.168.1.20。我的Docker容器的IP地址为172.17.0.2。当我从jconsole连接到172.17.0.2:1099时,它可以工作。

当我将此服务放入Docker机器时,无法连接到它。

我的Docker机器的IP地址为192.168.99.100,容器中的IP地址为172.17.0.2,但是当我使用jconsole连接到192.168.99.100:1099时,它不起作用。

要重复它:

192.168.1.20 --- 172.17.0.2:1099有效

192.168.1.20 ---(192.168.99.100 --- 172.17.0.2:1099)并无法从我的主机连接到192.168.99.100:1099。

值得一提的是,我可以通过Docker计算机的外部IP地址访问Docker计算机中容器化的服务,例如,这将起作用:

192.168.99.100 ---(192.168.99.100:8080 --- 172.17.0.2:8080)

但是,当我使用JMX时,它将无法正常工作。

它是Tomcat服务。我在启动Tomcat实例的脚本中有这个:

CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n \
-Dcom.sun.management.jmxremote.port=1099 \
-Dcom.sun.management.jmxremote.rmi.port=1099 \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname=IP address of Docker container 
dpr

我认为问题可能在于java.rmi.server.hostname财产的价值这必须是JMX客户端用于连接到JVM的主机名或IP地址。在第一种情况下,您直接使用来连接到容器172.17.0.2:1099,此设置需要设置为172.17.0.2在后一种情况下,您通过docker机器访问容器192.168.99.100:1099,则需要将设置设置为192.168.99.100

在研究非常相似的问题(同时被删除)的过程中,我偶然发现了一个博客条目(同时也被删除了)。尽管它已经很老了,但它让我知道了JMX连接的工作原理:

  1. JMX注册表侦听<com.sun.management.jmxremote.port>容器的端口
  2. 如果使用JConsole连接到注册表,则注册表将向客户端提供JMX服务URL。
  3. 客户端使用此URL来获取JMX对象

服务URL如下所示service:jmx:rmi:///jndi/rmi://<java.rmi.server.hostname>:<com.sun.management.jmxremote.rmi.port>/jmxrmi那是你的情况service:jmx:rmi:///jndi/rmi://172.17.0.2:1099/jmxrmi由于只能从docker机器内部访问此地址,因此无法从远程连接。在我的问题中,我涉及RMI端口方面的相同问题...

似乎没有针对此问题的开箱即用的解决方案。但是一个可以同时提供JMX端口和容器的环境变量启动外部主机名(或IP),如建议在这里这些可以在JMX配置中使用:

docker run -p 1099:1099 \
    -e "JMX_HOST=192.168.99.100" \
    -e "JMX_PORT=1099" \
    company/tomcat:8.0.30

CATALINA_OPTS="... \
    -Dcom.sun.management.jmxremote=true \
    -Dcom.sun.management.jmxremote.port=$JMX_PORT \
    -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT \
    -Dcom.sun.management.jmxremote.authenticate=false \
    -Dcom.sun.management.jmxremote.ssl=false \
    -Djava.rmi.server.hostname=$JMX_HOST"

不太好,但是应该可以...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将本地机器上运行的 Postgres 数据库连接到 docker 容器

来自分类Dev

如何将Django连接到docker redis容器?

来自分类Dev

从Docker容器连接到主机?

来自分类Dev

从Docker容器连接到主机?

来自分类Dev

Docker:将Docker容器直接连接到主机LAN

来自分类Dev

如何将Docker Web应用程序容器连接到Docker PostgreSQL容器?

来自分类Dev

如何将Docker容器中的目录挂载到主机?

来自分类Dev

如何将Docker容器中的目录挂载到主机?

来自分类Dev

如何将主机代码挂载到 docker 中的容器?

来自分类Dev

Docker如何将卷从Docker Client挂载到在Docker主机上运行的Docker容器中?

来自分类Dev

无法将Docker Wordpress容器连接到主机上的MySQL

来自分类Dev

无法从本地机器连接到 docker 容器中的 mongodb

来自分类Dev

如何将在boot2docker中运行的Docker容器连接到在另一主机上运行的网络服务?

来自分类Dev

从主机连接到mongo docker容器

来自分类Dev

Docker:无法从主机连接到容器

来自分类Dev

从 docker 容器连接到主机端口

来自分类Dev

如何从 docker 主机上的 nginx 连接到容器中的应用程序

来自分类Dev

无法将MySQL容器连接到Docker中的Tomcat容器

来自分类Dev

如何将Docker容器与主机的localhost mysql数据库连接?

来自分类Dev

如何将Docker映像连接到Docker组成的网络

来自分类Dev

连接到Docker主机!

来自分类Dev

如何将流量从CentOS Docker容器中的VM重定向到主机端口?

来自分类Dev

如何将虚拟主机映射到 docker 中的容器?

来自分类Dev

如何将 docker 容器上的错误冒泡到主机中的 jenkins

来自分类Dev

将 Spring Boot Docker 容器连接到 MongoDB Docker 容器

来自分类Dev

将robomongo连接到mongoDB docker容器

来自分类Dev

将Conduktor连接到Kafka Docker容器

来自分类Dev

如何从 docker 容器中的 python 脚本连接到本地主机上的 mysql 数据库

来自分类Dev

如何连接到在Docker容器中运行的服务器?

Related 相关文章

  1. 1

    如何将本地机器上运行的 Postgres 数据库连接到 docker 容器

  2. 2

    如何将Django连接到docker redis容器?

  3. 3

    从Docker容器连接到主机?

  4. 4

    从Docker容器连接到主机?

  5. 5

    Docker:将Docker容器直接连接到主机LAN

  6. 6

    如何将Docker Web应用程序容器连接到Docker PostgreSQL容器?

  7. 7

    如何将Docker容器中的目录挂载到主机?

  8. 8

    如何将Docker容器中的目录挂载到主机?

  9. 9

    如何将主机代码挂载到 docker 中的容器?

  10. 10

    Docker如何将卷从Docker Client挂载到在Docker主机上运行的Docker容器中?

  11. 11

    无法将Docker Wordpress容器连接到主机上的MySQL

  12. 12

    无法从本地机器连接到 docker 容器中的 mongodb

  13. 13

    如何将在boot2docker中运行的Docker容器连接到在另一主机上运行的网络服务?

  14. 14

    从主机连接到mongo docker容器

  15. 15

    Docker:无法从主机连接到容器

  16. 16

    从 docker 容器连接到主机端口

  17. 17

    如何从 docker 主机上的 nginx 连接到容器中的应用程序

  18. 18

    无法将MySQL容器连接到Docker中的Tomcat容器

  19. 19

    如何将Docker容器与主机的localhost mysql数据库连接?

  20. 20

    如何将Docker映像连接到Docker组成的网络

  21. 21

    连接到Docker主机!

  22. 22

    如何将流量从CentOS Docker容器中的VM重定向到主机端口?

  23. 23

    如何将虚拟主机映射到 docker 中的容器?

  24. 24

    如何将 docker 容器上的错误冒泡到主机中的 jenkins

  25. 25

    将 Spring Boot Docker 容器连接到 MongoDB Docker 容器

  26. 26

    将robomongo连接到mongoDB docker容器

  27. 27

    将Conduktor连接到Kafka Docker容器

  28. 28

    如何从 docker 容器中的 python 脚本连接到本地主机上的 mysql 数据库

  29. 29

    如何连接到在Docker容器中运行的服务器?

热门标签

归档