在 Dockerfile CMD

问题描述

目标

我需要让 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 (将#修改为@)