如何在 docker-compose 中重新构建容器?

docker compose build 服务名 重新构建镜像,docker compose up -d --build 构建并重建容器;只想强制重建(不改代码)用 up -d --force-recreate。本文讲清各命令差别。

最佳实践
如何在 docker-compose 中重新构建容器?封面

核心命令:docker compose build <服务名> 重新构建该服务镜像,docker compose up -d --build 构建并替换运行中的容器。改了代码/Dockerfile 用前者组合;只改了 yml 配置用 up -d(自动检测重建);什么都没改但想重来用 --force-recreate

按场景选命令

# 场景1:改了代码或 Dockerfile → 重新构建 + 更新容器
docker compose build web
docker compose up -d web

# 一步合并写法
docker compose up -d --build web

# 场景2:只改了 docker-compose.yml(环境变量、端口等)
docker compose up -d        # compose 自动检测配置变化并重建对应容器

# 场景3:啥都没改,想强制重建容器
docker compose up -d --force-recreate web

# 场景4:缓存可疑,从零构建
docker compose build --no-cache web

build 和 up --build 的区别

  • docker compose build:只构建镜像,不动运行中的容器(新镜像下次 up 才用上)
  • docker compose up -d --build:先构建(有变化的话)再重建容器,一步到位
  • docker compose restart不重建,只是停启现有容器——改了代码用它无效,常见误区

重建时数据怎么办

  • 卷(volumes)里的数据不动
  • 容器可写层丢失——重要数据必须已卷化

顺手清理

反复构建会积累旧镜像(悬空层):

docker image prune      # 清悬空镜像

观测云对照

发版动作与线上表现对照。 compose 重建发版后,观测云的错误率、响应时间曲线若出现台阶式变化,配合版本标签即可确认关联;异常时日志检索直接定位新版引入的问题。

常见问题(FAQ)

Q:build 提示 uses an image, skipping?
A:该服务用 image: 引用现成镜像而非 build: 构建,不需要也不能 build,直接 pull 更新。

Q:多服务项目能一次全构建吗?
A:docker compose build 不带服务名 = 构建全部带 build 配置的服务。

Q:--build 每次都很慢?
A:检查 Dockerfile 层缓存是否被失效(COPY . 放太早会把所有后续层缓存击穿),依赖安装层应与代码拷贝层分离。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台