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

Docker重建镜像后代码修改未生效问题求助

代码修改后Docker容器未更新的排查与解决

问题场景

我在项目开发阶段使用Docker进行运行验证,近期修改代码后执行Docker镜像重建与容器启动操作,发现代码变更未被应用,容器运行结果与修改前完全一致。

我的Dockerfile内容

### STAGE 1: Build ###
FROM node as build
WORKDIR /usr/src/app
COPY package.json package-lock.json ./
COPY . .
RUN npm install -g @angular/cli
RUN npm install

RUN ng build --prod
### STAGE 2: Run ###
FROM nginx:1.17.1-alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build /usr/src/app/dist/* /usr/share/nginx/html

构建与运行命令

docker build -t edtmaker .
docker run --name edtmaker -d -p 8888:80 edtmaker

常见原因及解决方法

1. Docker构建缓存复用

Docker会对构建步骤进行缓存,如果代码文件的修改未触发缓存失效,会直接复用之前的构建结果,导致新代码没被打包。

解决:
构建时强制禁用缓存,确保所有步骤重新执行:

docker build --no-cache -t edtmaker .

2. 旧容器未清理,启动了旧实例

如果之前的容器未删除,重复执行docker run可能因容器名称冲突报错,或误启动遗留的旧容器实例。

解决:
先停止并删除旧容器,再启动新容器:

docker stop edtmaker
docker rm edtmaker
docker run --name edtmaker -d -p 8888:80 edtmaker

或者启动时使用--rm参数,容器停止后自动删除,避免遗留旧容器:

docker run --rm --name edtmaker -d -p 8888:80 edtmaker

3. Angular构建产物路径错误

Angular执行ng build --prod后,产物默认放在dist/[项目名称]子目录下,而非dist根目录。原Dockerfile中的COPY命令可能只复制了空目录或错误内容。

解决:

  1. 本地执行ng build --prod,查看dist目录下的具体子目录名称(例如edtmaker)。
  2. 修改Dockerfile中的COPY命令:
COPY --from=build /usr/src/app/dist/edtmaker /usr/share/nginx/html

将edtmaker替换为你的实际项目名称。

4. 验证镜像内容

构建完成后,进入镜像内部确认是否包含最新的构建产物:

docker run --rm -it edtmaker sh
# 在容器内查看html目录的文件内容
ls -l /usr/share/nginx/html

检查文件的修改时间是否为最新,或查看具体文件内容是否符合代码修改后的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:50:46