我有自己的手写的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端口。
发布于 2018-03-27 13:47:03
这个怎么样:
如果您的服务基于microsoft/dotnet Docker映像,则根据同一映像创建一个新的dockerfile,并安装调试器ssh和unzip。
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构建并将其推送到您的注册表。
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文件中。
然后,当您的容器正在运行,并且您决定需要调试它时,您可以将调试器容器作为侧车容器附加到服务:
docker run -d -p 10222:22 --pid container:<container name> - myregistry/dotnetdebugger然后在Visual中,转到菜单工具→Options→跨平台→连接管理器,并添加一个新的连接。指定容器的IP地址或主机名,10222作为端口( docker run命令中的端口),根作为没有密码的用户。
发布于 2018-05-13 01:52:18
从2018年5月起,如果您正在使用Visual,则可以使用它们的官方支持。
您只需安装Docker并添加对Docker项目的支持菜单项目→Docker支持即可。
这将创建一个带有Docker组合的新项目和一个指向您的项目的dockerfile,然后Visual将此链接并允许调试!
https://stackoverflow.com/questions/48661857
复制相似问题