Shr*_*ike 10 debugging remote-debugging visual-studio docker .net-core
我有自己的手写Dockerfile/docker-compose文件.我从命令行启动容器.现在我想将VS2017(不是VSCode)连接到Docker(基于Linux)容器中的应用程序.它似乎应该是相当容易的任务,但我找不到任何有关如何执行此操作的信息.
我仔细阅读了指南https://github.com/Microsoft/MIEngine/wiki/Offroad-Debugging-of-.NET-Core-on-Linux---OSX-from-Visual-Studio.起初它看起来像我需要的 - 关于如何远程调试在Linux中运行的netcore应用程序的描述.但它只讲述了故事的一部分 - 如何通过SSH进行调试.刚刚提到Docker,但没有说明如何远程调试Docker中的应用程序.
我想这里应该没有太多具体的Docker,它只是在Docker中运行vsdbg并附加在这里.但显然这是一个非常常见的开发用例,并且奇怪的是没有关于此的好消息.
当然,还有VS Tools for Docker,我们可以轻松地在Docker容器中调试应用程序.但对我来说VS Tools for Docker非常糟糕.是的,他们一开始就无缝工作.但绝对不清楚幕后发生了什么.
看起来我们只是可以查看Docker的VSTools并尝试重现它.但这不是很明显.它为docker-compose(docker-compose.vs.debug.g.yml)添加了一个额外的"debug"yaml文件,它应该可以进行调试.我把那个yaml添加到我手写的docker-compose,运行Dockers但是如何附加VS?我获得了我的容器的IP,试图在该IP上找到一个远程调试器,并且4022 VS看不到任何东西.此外,由Tools for Docker创建的debug.yaml对于暴露4022端口没有任何意义,这是可疑的.
PS在Windows容器上找到了一个很好的指南 - https://github.com/riskfirst/debugging-aspnet-core-windows-docker
这个怎么样:
如果您的服务基于microsoft/dotnet Docker 映像,请基于相同的映像创建一个新的 dockerfile,并安装调试器、ssh 和解压缩。
FROM microsoft/dotnet
RUN apt-get update && apt-get -y install openssh-server unzip
RUN mkdir /var/run/sshd && chmod 0755 /var/run/sshd
RUN sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin without-password/g' /etc/ssh/sshd_config
RUN sed -i 's/#StrictModes yes/StrictModes no/g' /etc/ssh/sshd_config
RUN service ssh restart
RUN mkdir /root/.vs-debugger && chmod 0755 /root/.vs-debugger
RUN curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v vs2017u1 -l /root/.vs-debugger/
EXPOSE 22
Run Code Online (Sandbox Code Playgroud)
构建并将其推送到您的注册表。
docker build -t myregistry/dotnetdebugger .
docker push myregistry/dotnetdebugger
Run Code Online (Sandbox Code Playgroud)
接下来确保您的服务构建将PDB文件输出为可移植 PDB 文件 - 从 Visual Studio 在 Linux 和 OS X 上对 .NET Core 进行越野调试
并确保在构建服务的 Docker 映像时 PDB 文件包含在 DLL 文件中。
然后,当您的容器正在运行并且您决定需要调试它时,您可以将调试器容器作为 side car 容器附加到服务:
docker run -d -p 10222:22 --pid container:<container name> - myregistry/dotnetdebugger
Run Code Online (Sandbox Code Playgroud)
然后在 Visual Studio 中,转到菜单Tools ? 选项?跨平台?连接管理器- 并添加一个新连接。指定容器的IP地址或主机名,10222作为端口(docker run命令中的那个),root作为没有密码的用户。
| 归档时间: |
|
| 查看次数: |
3327 次 |
| 最近记录: |