有Rider's documentation on how to debug remote applications via SSH,当我调试运行在WSL 2上的应用程序时,它可以完美地工作。但是它不能调试在WSL 2中的docker容器中运行的应用程序。Rider甚至在“运行”-〉“附加到远程进程”菜单中显示此应用程序,但无法附加到它(没有错误,但不附加)。
我可能需要在应用程序运行的docker容器中运行JetBrains SSH Server Utility并共享端口,但我不知道如何正确执行。
**编辑:**为了清楚起见,我添加了一个图表,说明我希望得到的结果。
任何帮助是非常感谢。谢谢
1条答案
按热度按时间tsm1rwdh1#
下面是在Docker容器中远程调试Rider的解决方案。确切的解决方案取决于您的特定环境以及您使用Docker构建的映像类型。步骤通常如下:
1.在
Dockerfile
中下载相应的JetBrains SSH代理1.设置必要的权限来运行它(某些图像可能无法以
root
运行)1.创建一个 Package 器
entrypoint
脚本,该脚本首先执行SSH代理,然后执行您的应用。1.将此
entrypoint
设置为Dockerfile
中的默认ENTRYPOINT
或CMD
1.运行映像,转发必要的调试器端口
从那里开始,步骤与任何其他远程SSH连接相同。
假设你有一个
Dockerfile
在ubuntu
上构建你的应用:Dockerfile
entrypoint.sh
接下来,构建包含启用调试符号的应用程序的映像:
最后,启动容器:
请注意,
-p7777:7777
标志指定运行容器时的转发端口7777
。如果在单独的服务器上执行此操作,则可能需要更改防火墙设置,以进一步允许远程访问端口。我们现在可以看到,在主机上,端口
7777
被正确转发到调试SSH代理:从这里,您可以远程连接,如正常在骑士。
如果您的应用程序使用不同的基础Docker镜像,步骤是相同的,但可能需要根据所涉及的操作系统和架构进行调整。
entrypoint
逻辑显然可以用任何语言编写。还要注意,此设置包含几个反模式,不建议将其用于任何类型的生产部署。除了调试符号永远不应该出现在生产代码中之外,容器应该只包含一个关注点,并且调试SSH进程不会被
docker
进程监视,以防它意外崩溃。