实际上,我想要一个适用于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;
}
}
}
}
Docker文件
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
命令行?我不会在这里显示我的失败尝试,因此不会对正确答案产生偏见。这应该是一个非常普遍的问题,但是我找不到可行的解决方案。
更新。 可行的解决方案
这个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
可以使用列出的任何接口。例如,docker0
使用地址接口即可172.17.0.1
。容器的地址172.17.0.2
也可以。
首先,您应该使用以下JVM参数运行应用程序:
-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
然后,您应该为docker公开端口:
EXPOSE 9010
还要使用docker run命令指定端口绑定:
docker run -p 9010:9010 -it --rm --name hwd hello-world-daemon
之后,您可以使用Jconsole连接到本地9010端口并管理在Docker中运行的应用程序。
实际上,我想要一个适用于JEE容器的解决方案,特别是适用于Glassfish,但在我尝试了多种设置组合但没有成功后,我将设置简化为最简单的情况。 这是我在 Docker 容器中启动的 Hello World 守护进程。我想将或附加到它。一切都在同一台机器上。 Dockerfile 构建: 正在运行: 问题: 哪些 JVM 参数应该添加到 命令行? 应公开和发布哪些端口? Docker 容器应该使用
我使用命令在我的macOS Big Sur上运行带有Ubuntu Xenial映像的docker容器,它工作正常,给我一个Linux的终端。 然而,我想将一个卷附加到我的容器中,这样我就可以将我在ubuntu终端中所做的工作保存在Mac文件系统的容器中。为此,我尝试运行以下命令: sudo docker run-it ubuntu:xenial-v/Users/myname/Documents/U
在部署时,我面临一个“CrashLoopBackoff”错误。Net核心API和
我需要在AWS EC2服务器(Ubuntu18.04 LTS)上的docker run命令启动的运行容器上附加一个卷,并使用以下命令 我使用的是Docker版本19.03.12。
问题内容: 我需要在Windows Docker容器内附加到PATH,并且尝试了许多排列。 这些都不起作用:它们不评估预先存在的PATH变量。 追加到PATH的正确语法是什么?我什至可以在Docker内部添加到PATH吗?(我可以在类似的Linux容器上使用) 问题答案: 不幸的是,这是行不通的,因为Windows环境变量的工作方式与linux有所不同。更多信息 到目前为止,唯一的方法是通过 但是
我对Tomcat和Docker还很陌生--所以我可能在这个问题中遗漏了一个Tomcat基础知识。 我试图做的是构建一个Docker容器,该容器运行一个springboot Restful web服务,该服务只返回一些静态数据。这都是在OSX上运行的,所以我也使用了Boot2Docker。 我编写了自己的Dockerfile来构建我的应用程序运行的容器: 这个Dockerfile工作良好,并且我能够