.net - 使用 Visual Studio 2017 调试已经运行的 Docker Linux .NET Core 容器

标签 .net linux .net-core ubuntu-14.04 remote-debugging

使用 Visual Studio,当我创建 .NET Core 应用程序并在 Linux 容器中运行它时,我可以使用 Visual Studio 2017 轻松调试它。

但是,当我从命令行使用 docker run 运行相同的图像实例(发布版本)时,我无法在 Visual Studio 2017 中找到附加到该实例的方法。

Visual Studio 如何做到这一点以及我如何为已经运行的 Docker Linux .NET Core 容器做同样的事情?另外,如果 Docker 镜像实例在远程 Linux 机器上运行,我该如何做同样的事情?

一些具体步骤和示例会有所帮助。

最佳答案

已阅读Ankush's blog post ,这个怎么样:

如果您的服务基于 microsoft/dotnet 镜像,请基于同一镜像创建一个新的 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

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

docker build -t myregistry/dotnetdebugger .
docker push myregistry/dotnetdebugger

接下来确保您的服务构建将 PDB 文件输出为可移植 PDB 文件。看 Off-road Debugging of .NET Core on Linux or OS X from Visual Studio .

并确保在构建服务的 Docker 镜像时,PDB 文件包含在 DLL 文件中。或者更好的是,当您启动 Side Car 容器时,卷挂载一个带有 PDB 文件的人工制品目录。

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

docker run -d -p 10222:22 --pid container:<container name>  myregistry/dotnetdebugger

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

完成后,您可以简单地关闭 sidecar 容器,让您的服务容器继续运行,并且不公开任何服务的一般操作不需要的内容。

关于.net - 使用 Visual Studio 2017 调试已经运行的 Docker Linux .NET Core 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48381127/

相关文章:

.net - 我应该对 View 模型上的方法或命令进行单元测试吗?

c# - MySql 最后插入 ID,连接器 .net

linux - 如何为每个运行的脚本设置计时器

linux - 为什么构建后会生成很多镜像

asp.net-core - 仅在 Windows PC 上无法在 ASP.NET Core 上加载文件或程序集 'Microsoft.AspNetCore.Connections.Abstractions'

c# - AppSettings 中的更改需要重新启动我的应用程序,我该如何避免?

c++ - 交叉编译 C++ 程序时权限被拒绝

c# - 如何使用反射获取 Action 的 Http Verb 属性 - ASP.NET Core?

amazon-web-services - Cloudformation 自定义资源创建失败

.net - 如何为我的 .NET MVC 项目(在 Azure 存储模拟器上)创建新的 CloudBlobContainer 实例?