You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio中Docker Compose无法同步代码变更问题求助

.NET 6 API Docker Compose 代码变更不同步问题排查与解决

核心问题分析

代码修改后直接docker-compose up不生效,大概率是容器没挂载本地代码目录,导致容器内跑的还是旧代码;或是构建时复用了缓存,没生成最新程序集。

解决方案步骤

1. 调整Dockerfile适配开发模式

开发场景下别用“构建-发布”的生产镜像逻辑,直接用SDK镜像配合dotnet watch实现热重载,示例Dockerfile:

FROM mcr.microsoft.com/dotnet/sdk:6.0
WORKDIR /app
EXPOSE 80
# 挂载本地代码后再restore,避免每次构建都重新下载包
COPY ./Test.API/Test.API.csproj ./Test.API/
RUN dotnet restore ./Test.API/Test.API.csproj
COPY . .
# 用watch监听代码变更自动重启服务
ENTRYPOINT ["dotnet", "watch", "run", "--urls", "http://0.0.0.0:80"]

2. 配置docker-compose.yml挂载本地代码

在API服务节点添加volumes,把本地代码目录挂到容器里,确保代码变更实时同步:

version: '3.8'

services:
  testapi:
    build:
      context: .
      dockerfile: Test.API/Dockerfile
    ports:
      - "5000:80"
    volumes:
      # 挂载本地API代码目录到容器对应路径
      - ./Test.API:/app/Test.API
      # 共享宿主机NuGet缓存,减少重复下载
      - ~/.nuget/packages:/root/.nuget/packages
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ConnectionStrings__DefaultConnection=server=mysql;database=TestDB;user=root;password=yourpwd;
    depends_on:
      - mysql
    networks:
      - app-network

  mysql:
    image: mysql:8.0
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=yourpwd
      - MYSQL_DATABASE=TestDB
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - app-network

volumes:
  mysql-data:

networks:
  app-network:
    driver: bridge

3. 清理构建缓存

如果之前的构建缓存导致旧代码残留,执行命令强制重新构建:

docker-compose build --no-cache
docker-compose up

4. 解决本地单独启动API连不上数据库的问题

把Docker里的MySQL端口映射到宿主机(上面配置已经加了3306:3306),然后修改本地API的连接字符串为:
server=localhost;port=3306;database=TestDB;user=root;password=yourpwd;
这样本地运行的API就能通过宿主机端口访问Docker内的数据库。

验证流程

  1. 修改API代码(比如改个接口返回值)
  2. 执行docker-compose up,看容器日志是否触发热重载
  3. 调用接口,确认代码变更已生效

内容的提问来源于stack exchange,提问作者Adrien Dubois

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:40:31