【发布时间】:2016-01-31 00:20:36
【问题描述】:
实际上,我想要一个适用于 JEE 容器的解决方案,特别是适用于 Glassfish,但在尝试了许多设置组合但均未成功后,我将设置简化为最简单的情况。
这是我在 Docker 容器中启动的 Hello World 守护程序。我想将jconsole 或VisulaVM 附加到它。一切都在同一台机器上。
public class Main {
public static void main(String[] args) {
while (true) {
try {
Thread.sleep(3000);
System.out.println("Hello, World");
} catch (InterruptedException e) {
break;
}
}
}
}
Dockerfile
FROM java:8
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN javac Main.java
CMD ["java", "Main"]
建筑:docker build -t hello-world-daemon .
正在运行:docker run -it --rm --name hwd hello-world-daemon
问题:
-
CMD命令行中应该添加哪些 JVM 参数? - 应该公开和发布哪些端口?
- Docker 容器应该使用什么网络模式?
我没有在这里显示我失败的尝试,以免正确答案有偏见。这应该是一个很常见的问题,但我找不到可行的解决方案。
更新。有效的解决方案
这个 Dockerfile 有效
FROM java:8
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
RUN javac Main.java
CMD ["java", \
"-Dcom.sun.management.jmxremote", \
"-Dcom.sun.management.jmxremote.port=9010", \
"-Dcom.sun.management.jmxremote.local.only=false", \
"-Dcom.sun.management.jmxremote.authenticate=false", \
"-Dcom.sun.management.jmxremote.ssl=false", "Main"]
EXPOSE 9010
结合 docker run 命令
docker run -it --rm --name hwd -p 9010:9010 hello-world-daemon
VisualVM通过右键Local->Add JMX Connection连接,然后输入localhost:9010,或者通过添加远程主机。
JConsole 通过选择带有localhost:9010 的远程进程 进行连接。
将连接定义为远程时,可以使用ifconfig 列出的任何接口。例如,地址为172.17.0.1 的docker0 接口有效。容器地址172.17.0.2 也可以。
【问题讨论】: