使用VS Code调试.NET Core Docker容器

时间:2018-08-19 18:57:17

标签: docker visual-studio-code .net-core docker-compose dockerfile

在我的项目文件夹中,我有一个.NET Core 2.1 Web API项目,一个XUnit测试项目和我的docker compose文件。

在我的API项目中,我的Dockerfile具有以下内容

FROM microsoft/dotnet:2.1-sdk AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM microsoft/dotnet:2.1-sdk AS build
ARG NUGET_SOURCE
WORKDIR /src
COPY api/api.csproj api/
RUN dotnet restore api/api.csproj
COPY . .
WORKDIR /src/api
RUN dotnet build api.csproj -c Release -o /app

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
RUN apt-get update
RUN apt-get install -y curl unzip
RUN curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l ~/vsdbg
ENTRYPOINT ["dotnet", "api.dll"]

在我的docker-compose.yml文件中,我具有以下内容

version: '3.4'

services:
  api:
    image: myimage   
    ports: 
      - 5000:80
    environment:
      GoogleKey: thekey
      RedisConnectionString: redis
    build:
      context: .
      dockerfile: api/Dockerfile
      args:
        NUGET_SOURCE: https://api.nuget.org/v3/index.json
    volumes:
      - app_data:/app
    entrypoint: tail -f /dev/null
    depends_on:
      - redis

  redis:
    image: redis:3.2-alpine
    volumes:
      - redis_data:/data

volumes:  
  redis_data:
  app_data:

在VS Code中的launch.json文件中,我添加了以下内容

{
            "name": "Docker",
            "type": "coreclr",
            "request": "attach",
            "sourceFileMap": {
                "/app": "${workspaceRoot}"
            },
            "processId" : "${command:pickRemoteProcess}",
            "pipeTransport": {
                "debuggerPath": "/root/vsdbg/vsdbg",
                "pipeProgram": "docker",
                "pipeCwd": "${workspaceRoot}",
                "quoteArgs": false,
                "pipeArgs": [
                    "exec -i myimage_api_1"
                ]
             }
        },

从那里我运行docker-compose -f docker-compose.yml up -d --build,然后运行docker-compose exec api dotnet api.dll

然后我在Docker的调试窗格中单击播放按钮,并尝试将其附加到tail和api.dll命令,但是没有击中任何断点。

我在配置中错过了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)