For some reason I have issues connecting remote debug to a spring-boot app running inside docker. I start the java app with:
java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=8000,suspend=n -jar app.jar
For docker I expose these ports on docker-compose:
ports:
- "8080:8080"
- "8000:8000"
However, the debugger is not able to connect on port 8000. It works when I run the server locally but not inside docker. Any idea why?
Docker ps output:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0d17e6851807 pocmanager_manager:latest "/bin/sh -c 'java -D 3 seconds ago Up 2 seconds 0.0.0.0:8000->8000/tcp, 0.0.0.0:8080->8080/tcp pocmanager_manager_1
35ed2e2c32bc redis:latest "/entrypoint.sh redi 14 seconds ago Up 13 seconds 0.0.0.0:6379->6379/tcp pocmanager_redis_1
答案 0 :(得分:8)
我必须意识到在dockerFile中,Expose命令只执行一半的工作,这意味着只显示docker内部的端口,但不在外部,在您的示例中,结果将如下所示:
Debug与JAVA_OPTS和远程调试一起使用,dockerFile如下所示:
function createFilter()
{
d3.select(".filterContainer").selectAll("div")
.data(myData)
.enter()
.append("div")
.attr("class", "select-wrapper")
.append("select")
.each(function(d) {
// create select option for each data
d3.select(this)
.append("option")
.attr("id", function(d) {return "chk_" + d;})
.text(function(d){return d;});
});
}
并执行此命令:
<Text class="customStyleClass_1" text="Hellow World!" visible="{= ${somevalue} > '0' ? false : true }"/>
<Text class="customStyleClass_2" text="Hellow World!" visible="{= ${somevalue} > '0' ? true : false }"/>
正如您所看到的,您应该在运行期间公开调试端口,在我的情况下(eclipse)8000
答案 1 :(得分:7)
嗨,我遇到了同样的问题。
我将以下内容添加到Dockerfile中的入口点:
“ - agentlib:JDWP =运输= dt_socket,地址= 8000,服务器= Y,暂停= n” 的
现在看起来像这样:
FROM java:8
VOLUME /tmp
ADD realName*.jar app.jar
EXPOSE 4786
RUN sh -c 'touch /app.jar'
ENTRYPOINT
["java","-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
我在Dockerfile中没有Expose
端口8000。
希望这有帮助。
答案 2 :(得分:0)
我认为原因可能是,您的Virtual Box VM配置不会将调试端口隧道传送到主机。
检查此链接 https://github.com/boot2docker/boot2docker/blob/master/doc/WORKAROUNDS.md
基本上,在您的情况下,您必须命令提示并运行
VBoxManage modifyvm "boot2docker-vm" --natpf1 "tcp-port8000,tcp,,8000,,8000";
注意:确保VBoxManage在您的PATH中
答案 3 :(得分:0)
对我来说,仅在address命令行参数中指定调试端口是不够的。我还需要通过在端口前面加上*:
来通配所有IP地址:
java -agentlib:jdwp=transport=dt_socket,address=*:8000,server=y,suspend=n -jar spring-app.jar