docker-compose 重启/重建指定服务
场景说明
docker-compose项目,配置文件docker-compose.yml 配置了多个容器,如 mysql / spring / web
当前需要重构web,删除后再创建。
docker-compose 重建重启
普通重启
docker-compose start web
重建重启
# 1. 停止指定服务的容器
docker-compose stop 服务名
# 2. 删除该容器
docker-compose rm -f 服务名
# 3. 重新创建并启动
docker-compose up -d 服务名
docker高版本支持docker compose的可以用下面命令:
docker compose up --force-recreate --no-deps -d web
各部分解释:
docker compose up
这是 Docker Compose 的核心命令,用于启动并运行docker-compose.yml
文件中定义的所有服务(容器)。它会自动处理服务之间的依赖关系。--force-recreate
强制重新创建容器,即使它们的配置和镜像没有改变。- 通常用于确保使用最新的配置、环境变量或挂载的文件。
- 即使已有同名容器存在,也会被删除并新建。
--no-deps
只启动指定的服务(这里是web
),不启动它的依赖服务。- 在你的场景中,
web
服务可能依赖于mysql
和java
服务(例如数据库连接)。 - 使用此选项意味着:仅启动
web
容器,不会自动启动mysql
或java
容器。 - 注意:如果
web
需要这些依赖才能正常工作,它可能会因无法连接数据库或后端服务而报错或启动失败。
- 在你的场景中,
-d
表示“detached mode”(后台运行模式)。容器会在后台运行,不会占用当前终端。web
指定要操作的服务名称。只会对docker-compose.yml
中定义的名为web
的服务执行操作。
重启后查看
ubuntu@VM-0-8-ubuntu:/opt/docker/xxx-website$ docker compose ps
WARN[0000] /opt/docker/backend/docker-compose.yml: `version` is obsolete
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
mysql mysql:8.0.36 "docker-entrypoint.s…" mysql 2 minutes ago Up 2 minutes (healthy) 33060/tcp, 0.0.0.0:23306->3306/tcp, :::23306->3306/tcp
web node:20.19.5-alpine "docker-entrypoint.s…" web 4 seconds ago Up 2 seconds (health: starting) 0.0.0.0:6081->3000/tcp, :::6081->3000/tcp
redis redis:1.0 "docker-entrypoint.s…" redis 2 minutes ago Up 2 minutes (healthy) 6379/tcp
backend openjdk:17 "java -Xms256M -Xmx2…" backend About a minute ago Up About a minute (healthy) 0.0.0.0:6080->8080/tcp, :::6080->8080/tcp
可以观察到只有web容器时间变了,其他一致
整体含义:
根据
docker-compose.yml
文件中的定义,强制重新创建并启动名为web
的服务容器,并在后台运行;但不启动其依赖的服务(如 mysql、java 等)。
实际应用场景举例:
假设你的 docker-compose.yml
结构如下:
services:
mysql:
image: mysql:8.0
# ...
redis:
image: redis:last
# ...
backend:
build: ./backend
# ...
depends_on:
- mysql
- redis
web:
image:node:last
depends_on:
- backend
# ...
那么这条命令的效果是:
- 忽略
depends_on
关系; - 不管
backend
是否正在运行,都不会启动它们; - 只重建并启动
web
容器。
⚠️ 注意事项:
- 如果
web
服务依赖java
API 或mysql
数据库,而这些服务未运行,则web
很可能无法正常工作。 - 此命令适合用于单独更新前端应用,且确认后端/数据库服务已在运行的情况。
若要同时启动所有依赖项,请去掉
--no-deps
:docker compose up --force-recreate -d web
常见用途总结:
场景 | 推荐命令 |
---|---|
首次部署或完整启动 | docker compose up -d |
仅重启 web 服务(依赖已运行) | docker compose up --force-recreate --no-deps -d web |
更新 web 并连带启动依赖 | docker compose up --force-recreate -d web |
https://blog.xqlee.com/article/2510161110226731.html
评论