使用Visual Studio 2017调试正在运行的Docker Linux .NET Core容器

3
使用Visual Studio创建.NET Core应用程序并在Linux容器中运行时,可以使用Visual Studio 2017轻松调试它。
但是,当我使用命令行中的docker run运行相同的镜像实例(发布版本)时,我无法找到在Visual Studio 2017中附加到该实例的方法。
Visual Studio是如何做到这一点的?如果Docker Linux .NET Core容器已经运行,如何执行相同的操作?如果Docker镜像实例在远程Linux机器上运行,该怎么办?
以下是一些具体的步骤和示例。
1个回答

1

阅读完Ankush的博客文章后,您觉得这样如何:

如果您的服务基于microsoft/dotnet镜像,请创建一个基于相同镜像的新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文件。请参见在Visual Studio中从Linux或OS X上进行.NET Core越野调试
确保在构建服务的Docker镜像时,将PDB文件与DLL文件一起包含。或者更好的方法是,在启动辅助容器时,将带有PDB文件的工件目录挂载到容器中。
然后,当容器正在运行并且您决定需要对其进行调试时,可以将调试器容器作为辅助容器附加到服务中:
docker run -d -p 10222:22 --pid container:<container name>  myregistry/dotnetdebugger

然后在Visual Studio中,转到菜单 工具选项Crossplatform连接管理器 - 并添加一个新的连接。指定sidecar容器的IP地址或主机名以及10222作为端口(docker run命令中的端口),并将root作为用户而不需要密码。
完成后,您可以简单地关闭sidecar容器,使您的服务容器运行,并且不会暴露任何不需要的内容以进行服务的一般操作。

有没有想法为什么我按照这些说明后无法通过IP地址和10222连接到调试器?VS在尝试连接时超时。我正在使用docker inspect检索IP,在“网络”下。 - cbp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接