SeanBaker
SeanBaker

Reputation: 71

docker-compose doesn't work from Visual Studio

I have three web projects in one solution, they work together on gRPC. I am trying to bring all three projects up with docker-compose, but the problem is when the command

docker-compose up --build

This is how everything works, but when I try to start using the Visual Studio interface with a debugger connected, it does not work

When you run the application via docker-compose in Visual Studio, then when you start the containers themselves, an error appears with the following content:

Can't find a program for debugging in the container

And then it immediately pops out this:

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.

This message appears in the container logs:

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

This is a Dockerfile which is auto-generated by Visual Studio, it is the same for every project except for the paths to the project

#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
      

I will also post a link to GitHub where this project is located

(dev branch) https://github.com/SeanWoo/Votinger

I will forgive your help

Upvotes: 4

Views: 5993

Answers (2)

I found a solution to this crazy problem. My problem is that I have my repository on the network drive.

I've tried to find the different between my current project settings (Dockerfile, docker-compose, launchSettings, etc.), and the new project generated using Visual Studio WebApi template. Everything was identical but the docker debug always failed to attached to a container on my project.

When I create a new project using template, I created it locally on my local drive. This works. But when I create a new project again on a network drive. Immediately it failed to attach a debugger. So, solution is to move your git repository to your hard-disk. It will debug without any issues.

Upvotes: 0

SeanBaker
SeanBaker

Reputation: 71

I found a solution, the problem was that in the docker-compose.vs.debug.yml file is generated by Visual Studio, full paths to the project and debugger are indicated there, and my path went through a folder named as C #, and Visual Studio decided to calculate the symbol # unnecessary and deleted it, it turned out to be a path with the C folder, which led to a completely different place

Upvotes: 3

Related Questions