Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
附加到IntelliJ中的docker图像_Docker_Debugging_Intellij Idea - Fatal编程技术网

附加到IntelliJ中的docker图像

附加到IntelliJ中的docker图像,docker,debugging,intellij-idea,Docker,Debugging,Intellij Idea,我正在尝试设置IntelliJ来调试在docker容器中运行的Springboot应用程序。 我通过指定一个映像id来配置docker映像,并创建了一个远程应用程序配置,该配置具有启动docker容器预操作或其他任何调用。 当我为该远程配置启动调试时,它成功启动docker容器,但随后无法连接到端口5005以启动调试。 我很困惑,这到底是怎么回事?我是否需要在docker容器配置中指定一些内容来公开端口5005? 更具体地说,我得到: error running 'Unnamed Remote

我正在尝试设置IntelliJ来调试在docker容器中运行的Springboot应用程序。 我通过指定一个映像id来配置docker映像,并创建了一个远程应用程序配置,该配置具有启动docker容器预操作或其他任何调用。 当我为该远程配置启动调试时,它成功启动docker容器,但随后无法连接到端口5005以启动调试。 我很困惑,这到底是怎么回事?我是否需要在docker容器配置中指定一些内容来公开端口5005? 更具体地说,我得到:

error running 'Unnamed Remote Debug': Unable to open debugger port (localhost:5005): java.io.IOException "handshake failed - connection prematurally closed"
要使应用程序可调试,您需要在启用-agentlib:jdwp=transport=dt_socket、server=y、suspend=n、address=0.0.0.0:5005选项的情况下启动它,以便java进程在容器进程中公开一个debuger。我假设容器中的主进程是java进程 当IntelliJ在主机系统和容器中的应用程序上运行时,您需要将端口发布到主机系统,以便IntelliJ可以访问调试器。 在您的案例中,我成功创建了一个配置,该配置使用自定义入口点启动映像,并在容器中公开调试器:

为您的映像创建Docker配置: 命令需要是: 因此,将在端口5005上与主java进程一起创建一个调试器。还记得在这个命令末尾更改jar名称

根据Docker映像配置创建远程配置: 需要添加启动前步骤,以便在开始调试之前启动容器: 然后只需启动远程配置,它就可以工作了。启动它将启动一个容器,其中包含已启用的调试器和已暴露的调试器端口的应用程序。端口8080是应用程序运行的端口:
非常感谢。在我的辩护中,我意识到在发布问题后,我需要将该命令塞进docker。这篇文章写得很漂亮。一旦我确认它连接,我就会接受。好吧,既然我使用的是spring boot:build image,我就不能按照你建议的方式来做——命令不是java,它使用了一些疯狂的paketo CNB层和一个客户启动程序。因此,我通过设置env变量:JAVA_TOOL_OPTIONS=-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=nAlso来实现它。值得注意的是,在启动之前进行调试启动docker也不起作用。它无法启动docker映像,出现端口不可用的奇怪错误。但是如果我手动启动docker,然后启动调试,它就会工作。事实上,它并没有——IntelliJ无法打开正确的源文件。但它肯定会遇到一个断点。
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005 -Djava.security.egd=file:/dev/./urandom -jar app.jar
$ docker container ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                                            NAMES
c7f5f2e3a7b7        21225d2e368e        "java -agentlib:jdwp…"   About a minute ago   Up About a minute   0.0.0.0:5005->5005/tcp, 0.0.0.0:8080->8080/tcp   myapp