首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Visual调试在Linux容器中运行的.NET核心应用程序

如何从Visual调试在Linux容器中运行的.NET核心应用程序
EN

Stack Overflow用户
提问于 2018-02-07 10:46:39
回答 2查看 6.4K关注 0票数 10

我有自己的手写的Dockerfile/docker-组合文件。我从命令行启动容器。现在,我想在一个Docker (基于Linux的)容器中向我的应用程序附加VisualAccessStudio2017(而不是Visual Studio代码)。这似乎是一个相当容易的任务,但我找不到任何关于如何做到这一点的信息。

我仔细地阅读了指南https://github.com/Microsoft/MIEngine/wiki/Offroad-Debugging-of-.NET-Core-on-Linux---OSX-from-Visual-Studio。一开始,它看起来像我所需要的--描述如何远程调试在Linux中运行的.NET核心应用程序。但它只讲述了故事的一部分-如何通过SSH进行调试。并且只提到了Docker,但是它并没有提到如何远程调试Docker内部的应用程序。

我想这里不应该有太多关于Docker的细节,它只是在Docker内部运行vsdbg并在这里附加。但是很明显,这是一个非常常见的开发用例,而且这方面没有好的信息是很奇怪的。

当然,我们可以使用用于码头的VS工具轻松地调试Docker容器中的应用程序。但对我来说,对付码头工人的工具实在太糟糕了。是的,他们一开始是无缝工作的。但目前还不清楚引擎盖下到底发生了什么。

看起来,我们只需要查一下Docker的VS工具做了什么,并尝试复制它。但这并不是很明显。它添加了一个额外的“调试”YAML文件到坞-撰写(docker-compose.vs.debug.g.yml),这应该是调试魔术。我试图将YAML内容添加到我的手工编写的坞-撰写、运行Dockers中,但是我如何附加Visual?

我获取容器的IP地址,试图在该IP地址和4022上找到一个远程调试器,而Visual看不到任何内容。同样值得怀疑的是,由Docker工具创建的文件debug.yaml并没有像预期的那样公开4022端口。

我找到了一个很好的指南,但在Windows容器上

EN

回答 2

Stack Overflow用户

发布于 2018-03-27 13:47:03

这个怎么样:

如果您的服务基于microsoft/dotnet Docker映像,则根据同一映像创建一个新的dockerfile,并安装调试器ssh和unzip。

代码语言:javascript
复制
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

构建并将其推送到您的注册表。

代码语言:javascript
复制
docker build -t myregistry/dotnetdebugger .
docker push myregistry/dotnetdebugger

接下来,确保服务的构建是将PDB文件输出为可移植的PDB文件- https://github.com/Microsoft/MIEngine/wiki/Offroad-Debugging-of-.NET-Core-on-Linux---OSX-from-Visual-Studio

并确保在生成服务的Docker映像时,PDB文件包含在DLL文件中。

然后,当您的容器正在运行,并且您决定需要调试它时,您可以将调试器容器作为侧车容器附加到服务:

代码语言:javascript
复制
docker run -d -p 10222:22 --pid container:<container name> - myregistry/dotnetdebugger

然后在Visual中,转到菜单工具→Options→跨平台→连接管理器,并添加一个新的连接。指定容器的IP地址或主机名,10222作为端口( docker run命令中的端口),根作为没有密码的用户。

票数 5
EN

Stack Overflow用户

发布于 2018-05-13 01:52:18

从2018年5月起,如果您正在使用Visual,则可以使用它们的官方支持

您只需安装Docker并添加对Docker项目的支持菜单项目→Docker支持即可。

这将创建一个带有Docker组合的新项目和一个指向您的项目的dockerfile,然后Visual将此链接并允许调试!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48661857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档