问题描述
目标
我需要让 Jconsole 连接到在 Docker 容器中运行的 Java 进程。 Java 过程非常简单,仅用于测试目的。在 dockerfile 中,我在文件的 CMD 部分拥有所有相关命令,以便 JMX 允许 Jconsole 连接。我的容器在 EC2 实例上运行,我正在尝试从本地笔记本电脑进行连接。
当我将 EC2 实例的 IPv4 硬编码到字符串 -Djava.rmi.server.hostname=
中 CMD 下的 Dockerfile 时,一切正常
但我想在这里有一个动态值。
我尝试了什么
我在 dockerfile 中添加了一个 ENV 部分,并在 CMD 部分的主机名值中添加了一个变量,但我无法连接。我确信我只是搞砸了语法/格式或其他东西,所以我没有在 ENV 中使用动态值,而是使用 HOSTIP 变量对 IP 进行了硬编码,以便在继续之前我可以正确地获得语法。这是我目前所拥有的
WORKDIR /var/tmp
COPY ForLoop.java ForLoop.java
RUN javac ForLoop.java
ENV HOSTIP=3.92.171.162
CMD [ "java","-Dcom.sun.management.jmxremote","-Dcom.sun.management.jmxremote.port=9010","-Dcom.sun.management.jmxremote.rmi.port=9010","-Dcom.sun.management.jmxremote.local.only=false","-Dcom.sun.management.jmxremote.authenticate=false","-Dcom.sun.management.jmxremote.ssl=false","-Djava.rmi.server.hostname=${HOSTIP}","ForLoop" ]
从这里
既然这不起作用,我知道我搞砸了语法。我还在 CMD 部分尝试了一些不同的格式,但没有成功。
我最终需要做的是拥有 ENV HOSTIP=$(http://169.254.169.254/latest/meta-data/public-ipv4)
以便我可以在 -Djava.rmi.server.hostname=
的 CMD 字符串中使用 $HOSTIP 以便我可以将此映像拉到任何 EC2 实例并运行它。如果我能找到一种不同的方式来获取公共 IPv4,这样我就可以在 ECR、Fargate 等上运行它,那也很好,但解决这个问题是我的首要任务。
感谢您的帮助。
编辑 - 如果我必须在运行时执行类似 docker run -e HOSTIP=$(http://169.254.169.254/latest/meta-data/public-ipv4) ...
的操作,这是一个可以接受的解决方案。不过,如果我可以省略命令行上的变量,我会更喜欢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)