我有一个在Vagrant中运行的CoreOS.Vagrant专用网IP为192.168.111.1.CoreOS内部是一个Tomcat 8.0.32的docker容器.几乎一切正常(应用程序部署等)只是调试没有.Tomcat映射到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
从容器信息我假设端口按它们应该映射:
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"
.我已经尝试过改变各种配置但没有运气的一切.我错过了什么吗?
这是我用于此的命令:
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
说明
-e JPDA_ADDRESS = 8000
容器中的调试端口,作为环境变量传递
-e JPDA_TRANSPORT = dt_socket
传输类型,用于调试为socket,作为环境变量传递
-p 8888:8080
在主机上将tomcat端口8080暴露为端口8888
-p 9000:8000
将主机上的java调试端口8000暴露为端口9000
-v {host-file}:{container-file}
用我的本地on覆盖tomcat-user.xml,因为我需要访问管理器api
omit this line如果你的用例不需要
tomcat:8.0
见https://hub.docker.com/_/tomcat/
/usr/local/tomcat/bin/catalina.sh jpda run
命令在容器中运行
您可以随时将其更新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文件默认情况下处于调试状态,这可能不适合生产环境。