【发布时间】:2020-12-26 18:05:14
【问题描述】:
当我使用 docker 时,我正在努力思考如何调试应用程序。我找到了这个文档,它没有产生预期的结果:https://code.visualstudio.com/docs/containers/docker-compose
我做了以下事情:
dotnet new mvc- 在 VS Code 内部 ctrl + shift + p --> 将 Docker 文件添加到工作区
- 修改 docker-compose.debug.yml 以支持 SSL
metricdemo:
image: metricdemo
build:
context: .
dockerfile: Dockerfile
ports:
- 80
- 5000:443
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=http://+:80;https://+:443
- ASPNETCORE_Kestrel__Certificates__Default__Password=password
- ASPNETCORE_Kestrel__Certificates__Default__Path=/root/.dotnet/https/aspnetcore-cert.pfx
volumes:
- C:\cert\:/root/.dotnet/https
- ~/.vsdbg:/remote_debugger:rw
下一步是创建启动配置,以便附加调试器:
{
"name": "Docker .NET Core Attach (Preview)",
"type": "docker",
"request": "attach",
"platform": "netCore",
"netCore": {
"debuggerPath": "/remote_debugger/vsdbg"
},
"sourceFileMap": {
"/src": "${workspaceFolder}"
}
}
我尝试了使用和不使用 debuggerPath 集的两种组合。
在此之后,我使用 docker-compose 启动
docker-compose -f "docker-compose.debug.yml" up --build
然后我附加调试器。
更新调试不起作用的原因其实是Dockerfile本身:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["MetricDemo.csproj", "./"]
RUN dotnet restore "./MetricDemo.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "MetricDemo.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "MetricDemo.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MetricDemo.dll"]
构建和发布这两个层都是使用发布模式构建的。将此设置为调试,就可以了。现在引出了一个问题:如何从 docker-compose 控制这个变量,以便我可以从 docker-compose.debug.yml 构建调试模式并从 docker-compose.yml 构建发布配置?我真的不希望一个项目有 2 个 docker 文件。
【问题讨论】:
标签: docker asp.net-core visual-studio-code docker-compose