我正在使用dotnetcore开发应用程序,创建aspnetcore(2.1)Web api时我注意到的一件事是该项目上的“启用Docker”选项。见下文:
这真是太棒了,它允许我针对本地docker运行Web应用程序进行调试! :-D我看到我为docker项目有一个新的.dcproj文件,在我的Web api中有一个docker文件,在docker项目中有一个yml文件。我需要在调试中运行的所有内容。
现在,我正在创建一个dotnetcore控制台应用程序(同样,我正在使用core 2.1版本)。不幸的是,我没有控制台应用程序的“启用Docker支持”选项,并且想在本地Docker实例中运行控制台应用程序。我正在运行的Visual Studio版本如下:
我正在寻找,但似乎找不到docker项目作为项目类型模板。因此,我诉诸于从Web应用程序复制docker项目并对其进行修改以运行我的控制台应用程序...不用说,我无法使其运行。尝试启动docker compose时出现以下错误:
无法启动调试适配器
除了我的项目和dll名称(正确设置)之外,我的docker文件与网络项目中的那个(有效)文件相同。
我的yml文件也一样,除了名称也被更改了。不知道我在做什么错-是否有人设法做到这一点?我最终希望通过Visual Studio调试在控制台应用程序在docker中运行时进行调试。
感谢您提前提出建议!
详细而言,这是我的 Dockerfile :
FROM microsoft/dotnet:2.1.2-runtime-alpine3.7 AS base
WORKDIR /app
EXPOSE 52649
EXPOSE 44331
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY AI.EmitterJob.csproj AI.EmitterJob/
RUN dotnet restore AI.EmitterJob/AI.EmitterJob.csproj
COPY . .
WORKDIR /src/AI.EmitterJob
RUN dotnet build AI.EmitterJob.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish AI.EmitterJob.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "AI.EmitterJob.dll"]
和 docker-compose.yml 文件:
version: '3.4'
services:
ai.emitterjob:
image: ${DOCKER_REGISTRY}ai_emitter
build:
context: .
dockerfile: ../AI.EmitterJob/Dockerfile
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://+:443;http://+:80
- ASPNETCORE_HTTPS_PORT=44331
ports:
- "52649:80"
- "44331:443"
volumes:
- ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
- ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
注意-我知道我不需要在控制台应用程序中公开端口或在此处使用卷(或设置env vars),但我想将对Web docker文件的更改保持在最小限度。
答案 0 :(得分:0)
以防万一其他人想尝试一下,我终于让它工作了!
当我在docker文件上进行复制时,我更改的唯一一行是:
Watch OS
对此:
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
因为我以前使用的是高山建筑作为基础图像。恢复到aspnetcore基本映像可以使此工作正常进行。
显然,这对于正确的部署而言并不理想,我需要找到一个足够的替代品来安装将安装dotnetcore运行时的aspnetcore基本映像。
我很高兴现在可以通过docker调试控制台应用程序! :-D