参考
- 豆包
- https://learn.microsoft.com/en-us/visualstudio/containers/container-launch-settings?view=vs-2022
环境
软件/系统 | 版本 | 说明 |
---|---|---|
Windows | windows 10 专业版 22H2 64 位操作系统, 基于 x64 的处理器 | |
Microsoft Visual Studio | Community 2022 (64 位) - Current 版本 17.14.17 | |
.NET | 8 | |
Docker Desktop | 4.48.0 | |
Docker | Docker version 28.5.1, build e180ab8 | |
Docker Compose | Docker Compose version v2.40.0-desktop.1 |
正文
本文场景为:基础服务都编写在 docker-compose.yml
内,当前开发的 Asp.Net Core 应用
使用 Docker 调试
模式进行调试,应用需要调用 docker-compose.yml
内的基础服务,并且 docker-compose.yml
内的基础服务也需要访问当前开发的 Asp.Net Core 应用
(如:consul 服务注册与发现)。
- 编写自己的
docker-compose.yml
、指定网络并启动。
name: XiaqiuchuDemo
services:postgres:image: postgres:15-alpineenvironment:POSTGRES_USER: ${POSTGRES_USER} # 自定义用户名,已定义在 .env,具体实现请自行搜索POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} # 自定义密码,已定义在 .env,具体实现请自行搜索POSTGRES_DB: xiaqiuchu_db # 自定义初始数据库名ports:- "5432:5432" # 暴露 PostgreSQL 端口restart: unless-stoppednetworks:- xiaqiuchu_network
networks:xiaqiuchu_network:# external: truename: xiaqiuchu_network
-
在当前开发调试的项目执行
项目名右键->添加->Docker 支持
,添加Dockerfile
文件。(在应用创建时如果已选中启用Docker支持
则忽略本步骤)
-
添加完毕后在项目下会出现一个新文件
Dockerfile
,内容如下:(下面的内容是自动生成的,无需手动编写,仅供参考)# 请参阅 https://aka.ms/customizecontainer 以了解如何自定义调试容器,以及 Visual Studio 如何使用此 Dockerfile 生成映像以更快地进行调试。# 此阶段用于在快速模式(默认为调试配置)下从 VS 运行时 FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base USER $APP_UID WORKDIR /app EXPOSE 8080# 此阶段用于生成服务项目 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src COPY ["Home/Home.csproj", "Home/"] COPY ["Common/Common.csproj", "Common/"] RUN dotnet restore "./Home/Home.csproj" COPY . . WORKDIR "/src/Home" RUN dotnet build "./Home.csproj" -c $BUILD_CONFIGURATION -o /app/build# 此阶段用于发布要复制到最终阶段的服务项目 FROM build AS publish ARG BUILD_CONFIGURATION=Release RUN dotnet publish "./Home.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false# 此阶段在生产中使用,或在常规模式下从 VS 运行时使用(在不使用调试配置时为默认值) FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "Home.dll"]
-
编辑
项目/Properties/launchSettings.json
,修改profiles->Container (Dockerfile)
的内容,添加上容器指定网络的参数"containerRunArguments": "--network=xiaqiuchu_network"
-
完成(如果不生效请删除已有容器后重新运行调试)
此时当前调试的应用就可以通过hosts
进行网络通信了,如应用内使用http://postgres
就可以请求到指定容器,并且docker-compose.yml
内的容器也可以通过当前项目名(项目名为Home
)如http://Home
进行访问到当前项目(默认当前调试的项目Hosts
为项目名,也可以在容器启动参数进行指定Name
的形式进行命名)。