【问题标题】:docker-compose doesn't work from Visual Studiodocker-compose 在 Visual Studio 中不起作用
【发布时间】:2021-12-08 09:40:13
【问题描述】:

我在一个解决方案中拥有三个 Web 项目,它们在 gRPC 上协同工作。我正在尝试使用 docker-compose 启动所有三个项目,但问题是当命令

docker-compose up --build

这就是一切的工作方式,但是当我尝试在连接了调试器的情况下开始使用 Visual Studio 界面时,它不起作用

当你在 Visual Studio 中通过 docker-compose 运行应用程序时,当你自己启动容器时,会出现错误,内容如下:

Can't find a program for debugging in the container

然后它立即弹出这个:

The target process exited without raising an event fired by CoreCLR. Make sure the target process is configured to use .NET Core. This may be necessary if the target process has not started in .NET Core.

此消息出现在容器日志中:

Could not execute because the application was not found or a compatible .NET SDK is not installed.
Possible reasons for this include:
  * You intended to execute a .NET program:
      The application '/app/bin/Debug/net5.0/Votinger.Gateway.Web.dll' does not exist.
  * You intended to execute a .NET SDK command:
      It was not possible to find any installed .NET SDKs.
      Install a .NET SDK from:
        https://aka.ms/dotnet-download

这是一个由 Visual Studio 自动生成的 Dockerfile,除了项目路径之外,每个项目都相同

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 5000
EXPOSE 5001

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

FROM build AS publish
RUN dotnet publish "Votinger.Gateway.Web.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
FROM mcr.microsoft.com/dotnet/sdk:5.0
ENTRYPOINT ["dotnet", "Votinger.Gateway.Web.dll"]

docker-compose.yml

version: '3.4'

services:
  votinger.authserver.db:
    image: mysql:8
    container_name: Votinger.AuthServer.Db
    restart: always
    environment:
        MYSQL_ALLOW_EMPTY_PASSWORD: "yes"

  votinger.pollserver.db:
    image: mysql:8
    container_name: Votinger.PollServer.Db
    restart: always
    environment:
        MYSQL_ALLOW_EMPTY_PASSWORD: "yes"

  votinger.authserver.web:
    image: ${DOCKER_REGISTRY-}votingerauthserverweb
    container_name: Votinger.AuthServer.Web
    build:
      context: .
      dockerfile: Votinger.AuthServer/Votinger.AuthServer.Web/Dockerfile
    links:
        - votinger.authserver.db:authdb

  votinger.gateway.web:
    image: ${DOCKER_REGISTRY-}votingergatewayweb
    container_name: Votinger.Gateway.Web
    build:
      context: .
      dockerfile: Votinger.Gateway/Votinger.Gateway.Web/Dockerfile
    ports:
        - 5000:5000
    links:
        - votinger.authserver.web:authserver
        - votinger.pollserver.web:pollserver

  votinger.pollserver.web:
    image: ${DOCKER_REGISTRY-}votingerpollserverweb
    container_name: Votinger.PollServer.Web
    build:
      context: .
      dockerfile: Votinger.PollServer/Votinger.PollServer.Web/Dockerfile
    links:
        - votinger.pollserver.db:polldb

docker-compose.override.yml

version: '3.4'

services:
  votinger.authserver.web:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:5000;http://+:5001
      - ASPNETCORE_Kestrel__Certificates__Default__Password=password
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
    volumes:
      - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
      - ${APPDATA}/ASP.NET/Https:/https:ro

  votinger.gateway.web:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:5000;http://+:5001
      - ASPNETCORE_Kestrel__Certificates__Default__Password=password
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
    volumes:
      - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
      - ${APPDATA}/ASP.NET/Https:/https:ro
  votinger.pollserver.web:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:5000;http://+:5001
      - ASPNETCORE_Kestrel__Certificates__Default__Password=password
      - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
    volumes:
      - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
      - ${APPDATA}/ASP.NET/Https:/https:ro
      

我还会发一个链接到这个项目所在的GitHub

(开发分支) https://github.com/SeanWoo/Votinger

我会原谅你的帮助

【问题讨论】:

  • 您是否尝试过更新您的 Visual Studio?
  • @AndrewSilver 这没有用,这不是我第一次遇到这个问题,很久以前我也尝试通过重新安装 Visual Studio 来解决这个问题,但它没有帮助

标签: asp.net .net visual-studio docker asp.net-core


【解决方案1】:

我找到了解决方案,问题是在 Visual Studio 生成的 docker-compose.vs.debug.yml 文件中,项目和调试器的完整路径显示在那里,我的路径通过了一个名为的文件夹C#,而Visual Studio决定将符号#计算为不必要并删除它,原来是与C文件夹的路径,导致完全不同的地方

【讨论】:

  • 我只花了 2 个小时试图解决这个问题。将文件夹从C# 重命名为C-sharp,问题立即消失。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 2020-06-10
  • 2020-10-10
相关资源
最近更新 更多