【问题标题】:Failed to launch debug adapter, when starting Docker-compose in Visual Studio 2019?在 Visual Studio 2019 中启动 Docker-compose 时无法启动调试适配器?
【发布时间】:2021-03-18 13:58:22
【问题描述】:

我有一个 Visual Studio 解决方案,我想在其中运行各种 API 微服务。每个微服务都分别具有所需的 Dockerfile。我想使用 docker-compose 运行项目,所以我添加了容器编排支持。我还修改了 docker-compose.yml 和覆盖文件中的必要内容。然后我将 docker-compose 设置为启动项目。 (设置为启动项目)。但是,当我尝试使用 F5 启动时,调试器没有启动,并且我收到以下错误消息:

发生了一个或多个错误。 无法启动调试适配器。附加信息可能在输出窗口中可用。 操作已取消。

输出窗口:

程序 '' 以代码 -1 (0xffffffff) 退出。

在 Docker 桌面上我可以看到容器,但我的 API 项目的日志是空的。他们不会启动。

(我也启用了虚拟化和 HyperV。)

如何解决这个问题?

【问题讨论】:

  • 我正在经历同样的事情。我已经尝试了几乎所有推荐的东西。没有运气。
  • @Chris,我也是。重新安装操作系统,重新安装 Docker。结果相同。没有任何帮助。
  • 嘿@TomSoldier 你在这里有什么运气吗?我遇到了同样的问题,并设法获得了更多信息(请参阅此处stackoverflow.com/questions/69208007/…),但仍然没有解决方案。

标签: visual-studio docker api docker-compose containers


【解决方案1】:

根据 Microsoft 的说法,默认情况下,调试器以 快速模式 运行,以加快 docker 容器的构建过程。在这种模式下,您的 Dockerfile 只是部分构建。

https://docs.microsoft.com/en-us/visualstudio/containers/container-build?view=vs-2019

在快速模式下,Visual Studio 调用 docker build 时带有一个参数,告诉 Docker 只构建基础阶段。 Visual Studio 处理其余过程,而不考虑 Dockerfile 的内容。因此,当您修改 Dockerfile 时,例如自定义容器环境或安装额外的依赖项,您应该将修改放在第一阶段。放置在 Dockerfile 的构建、发布或最终阶段中的任何自定义步骤都不会执行。

这意味着,如果您在用于运行时的映像之前在 Dockerfile 中引入任何其他映像,它将尝试将此映像用于您的容器。

解决方案

  1. 如果您希望将所有步骤保留在 Dockerfile 中,同时仍然能够进行调试,请将运行时映像放在文件顶部,并在需要的地方仍然使用它。例如:
FROM mcr.microsoft.com/dotnet/aspnet:3.1 as base 
...
FROM base
WORKDIR /src
...
  1. 或者,您可以将 PropertyGroup 项添加到项目文件中,告诉它以 常规模式 构建 docker 文件。这会减慢您的构建速度。
<PropertyGroup>
   <ContainerDevelopmentMode>Regular</ContainerDevelopmentMode>
</PropertyGroup>

重现错误

我通过使用 Docker 支持和容器编排创建一个新的空 .NET 核心项目来验证这一点。

原始dockerfile:

FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["TestApplication/TestApplication.csproj", "TestApplication/"]
RUN dotnet restore "TestApplication/TestApplication.csproj"
COPY . .
WORKDIR "/src/TestApplication"
RUN dotnet build "TestApplication.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "TestApplication.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "TestApplication.dll"]

运行良好。当在 Dockerfile 的顶部添加不同的图像(本例中为节点)时,调试器会中断:

FROM node:14-alpine as node-base

FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["TestApplication/TestApplication.csproj", "TestApplication/"]
RUN dotnet restore "TestApplication/TestApplication.csproj"
COPY . .
WORKDIR "/src/TestApplication"
RUN dotnet build "TestApplication.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "TestApplication.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "TestApplication.dll"]

【讨论】:

  • 感谢您的回复。我会试试你的方法,如果可行,我会接受作为解决方案。
猜你喜欢
  • 2022-06-28
  • 2020-03-05
  • 2021-03-21
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 2021-07-29
  • 2016-12-23
相关资源
最近更新 更多