我有一个在Vagrant中运行的CoreOS。 Vagrant专用网IP为192.168.111.1。 CoreOS内部是一个Tomcat 8.0.32的docker容器。几乎一切正常(应用程序部署等)只是调试没有。 Tomcat映射到8080端口,JPDA端口应为8000。
Tomcat JPDA配置为:
B = FOREACH A GENERATE MyUdf(name);
它以MyUdf
命令开头。使用JDPA_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000
运行时,控制台中的输出是:
catalina.sh jpda start
从容器信息中我假设端口按其应该映射:
docker-compose
我的泊坞窗图片基于此Dockerfile。
尝试运行远程调试配置时(下面的屏幕截图)我收到错误tomcat | Listening for transport dt_socket at address: 8000
。我已经尝试过改变各种配置但没有运气的一切。我错过了什么吗?
答案 0 :(得分:25)
这是我用于此的命令:
docker run -it --rm \
-e JPDA_ADDRESS=8000 \
-e JPDA_TRANSPORT=dt_socket \
-p 8888:8080 \
-p 9000:8000 \
-v D:/tc/conf/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml \
tomcat:8.0 \
/usr/local/tomcat/bin/catalina.sh jpda run
解释
答案 1 :(得分:3)
Try add to your Dockerfile
ENV JPDA_ADDRESS=8000
ENV JPDA_TRANSPORT=dt_socket
It works for me
答案 2 :(得分:3)
您始终可以将Dockerfile
更新为以下内容: -
FROM tomcat:8-jre8
MAINTAINER me
ADD target/app.war /usr/local/tomcat/webapps/app.war
ENV JPDA_ADDRESS="8000"
ENV JPDA_TRANSPORT="dt_socket"
EXPOSE 8080 8000
ENTRYPOINT ["catalina.sh", "jpda", "run"]
这确实意味着您的docker文件默认启用了调试,这可能不适合生产环境。
答案 3 :(得分:1)
使用docker-compose时,我解决了类似的问题(如果不是相同的话)。
它涉及未从docker-compose.yml文件正确传递的环境变量。
答案 4 :(得分:1)
接受的答案对我不起作用,显然是因为我使用的是Java11。似乎,如果您使用的是Java 9或更高版本,则需要这样指定JPDA地址:
JPDA_ADDRESS=*:8100
答案 5 :(得分:0)
您需要确保端口8080暴露给IntelliJ才能进行连接。这是在运行docker时你需要docker run -p 8080:8080
例如,我可以通过执行下面提到的步骤/检查来达到类似的要求。
这就是我的docker run命令的样子:
sudo docker run --privileged=true -d -p 63375:63375 -p 63372:8080 -v /tmp/:/usr/local/tomcat/webapps/config <container name>:<tag>
注意:我在容器和主机上都暴露了一个额外的端口63375。我在下面的CATALINA_OPTS中使用的相同端口。
这就是我的入口点(对于我正在构建的图像)。注意:我正在使用CATALINA_OPTS。另外,我正在使用maven来创建图像,所以下面是从pom.xml中删除的。
<entryPoint>
<shell>cd /usr/local/tomcat/bin; CATALINA_OPTS="-agentlib:jdwp=transport=dt_socket,address=63375,server=y,suspend=n" catalina.sh run</shell>
</entryPoint>
答案 6 :(得分:0)
我在本地环境中有类似的设置。我将JPDA_ADDRESS作为环境变量包含在Dockerfile中并重新创建容器。
ENV JPDA_ADDRESS 8000
#Expose port 8080, JMX port 13333 & Debug port 8000
EXPOSE 8080 13333 8000
CMD ["tail", "-f", "/dev/null"]
答案 7 :(得分:0)
对我来说,这样更清洁:
docker run -e JAVA_TOOL_OPTIONS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n" -p 8000:8000 tomcat:8.5-jdk8
通过这种方式,您不必修改容器Dockerfile。
说明:所有Java版本都检查JAVA_TOOL_OPTIONS环境变量:https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/envvars002.html