我有一个CoreOS在Vagrant中运行。流浪者内网IP为192.168.111.1。CoreOS内部是一个带有Tomcat 8.0.32的Docker容器。几乎所有的东西都工作正常(应用程序部署等),只是调试没有。TomcatMap到8080端口,JPDA端口应为8000。
事实
Tomcat JPDA配置有:
JDPA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000
它以catalina.sh jpda start
命令开始。使用docker-compose
运行时,控制台中的输出为:
tomcat | Listening for transport dt_socket at address: 8000
从容器信息中,我假设端口按其应该的方式Map:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dcae1e0148f8 tomcat "/run.sh" 8 minutes ago Up 8 minutes 0.0.0.0:8000->8000/tcp, 0.0.0.0:8080->8080/tcp tomcat
我的docker镜像就是基于这个Dockerfile。
问题
当尝试运行远程调试配置时(下面的屏幕截图),我得到错误Error running Debug: Unable to open debugger port (192.168.111.1:8000): java.net.ConnectException "Connection refused"
。我已经尝试了一切从改变各种配置,但没有运气。我错过了什么吗?
8条答案
按热度按时间wfypjpf41#
这是我使用的命令:
说明
调试容器中的端口,作为环境变量传递
作为套接字进行调试的传输类型,作为环境变量传递
将主机上的tomcat端口8080暴露为端口8888
将主机上的java调试端口8000暴露为端口9000
用我的本地覆盖tomcat-user.xml,因为我需要访问管理器API
如果您的用例不需要这一行,请省略它
参见https://hub.docker.com/_/tomcat/
在容器中运行的命令
yrdbyhpb2#
这个公认的答案对我不起作用,显然是因为我使用的是Java 11。如果你使用的是Java 9或更高版本,你需要像这样指定JPDA地址:
sulc1iza3#
您可以随时将
Dockerfile
更新为如下内容:-这意味着docker文件默认打开了debug,这可能不适合生产环境。
fae0ux8s4#
尝试添加到Dockerfile
对我很有效
xpszyzbs5#
您需要确保端口8080暴露给IntelliJ以进行连接。也就是说,在运行docker时,你需要像
docker run -p 8080:8080
这样的东西例如,我能够通过执行下面提到的步骤/检查来实现类似的要求。
这是我的docker run命令的样子:
注意:我在容器和主机上都暴露了一个额外的端口63375。我在下面的 Catalina _OPTS中使用的端口相同。
这就是我的入口点(我正在构建的图像)的样子。注意:我正在使用 Catalina _OPTS。另外,我使用maven来创建图像,所以下面是从pom.xml中排泄出来的。
jdgnovmf6#
我解决了一个类似的问题,如果不是相同的,当使用docker-compose。
它涉及到没有从docker-compose.yml文件正确传递环境变量。
查看我的堆栈溢出问题:
flseospp7#
对我来说,这样更干净:
这样,您就不必修改容器Dockerfile。
说明:所有java版本都检查JAVA_TOOL_OPTIONS环境变量:https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/envvars002.html
jjhzyzn08#
我在本地环境中也有类似的设置。我将JPDA_ADDRESS作为环境变量包含在Dockerfile中,并重新创建了容器。