常用命令详解
docker compose up
docker compose up 是 Docker Compose 最核心的命令,用于创建并启动 Compose 配置中定义的所有服务,涵盖容器创建、网络 / 卷初始化、依赖启动、扩缩容等全生命周期操作。该命令是单机 Compose 部署的入口,支持丰富的参数适配开发、测试、生产等不同场景。
Docker Compose 常用命令详解涵盖了 up、logs、build、config、exec 和 scale 等核心指令。文章详细解析了各命令的基础语法、关键参数、适用场景及注意事项,包括后台启动、日志实时跟踪、镜像构建优化、配置验证、容器内命令执行及服务扩缩容操作。内容包含开发、测试、生产环境的最佳实践建议,以及端口冲突、依赖启动顺序、数据持久化等常见问题的排查方案,旨在帮助开发者高效管理多容器应用的部署与维护。

docker compose updocker compose up 是 Docker Compose 最核心的命令,用于创建并启动 Compose 配置中定义的所有服务,涵盖容器创建、网络 / 卷初始化、依赖启动、扩缩容等全生命周期操作。该命令是单机 Compose 部署的入口,支持丰富的参数适配开发、测试、生产等不同场景。
docker compose [全局选项] up [命令选项][服务名...]
depends_on 定义的依赖关系控制服务启动顺序;全局选项需放在 up 之前,影响整个 Compose 执行上下文:
| 选项 | 作用 | 示例 |
|---|---|---|
-f/--file | 指定 Compose 配置文件(默认 docker-compose.yml/compose.yml) | docker compose -f docker-compose.prod.yml up |
-p/--project-name | 指定项目名(默认使用当前目录名),避免多项目资源冲突 | docker compose -p myapp-prod up |
--env-file | 指定环境变量文件(替代默认 .env) | docker compose --env-file .env.prod up |
-v/--verbose | 输出详细日志,便于调试 | docker compose -v up |
up 专属)| 选项 | 作用 | 适用场景 |
|---|---|---|
-d/--detach | 后台运行容器(不占用终端),生产环境必用 | docker compose up -d |
--abort-on-container-exit | 任意容器退出时终止所有服务 | 测试脚本、一次性任务 |
--exit-code-from <服务名> | 以指定服务的退出码作为命令整体退出码 | 集成测试 |
| 选项 | 作用 | 示例 |
|---|---|---|
--build | 启动前强制重新构建镜像 | docker compose up -d --build |
--no-build | 不构建镜像,仅使用本地已有镜像 | docker compose up --no-build |
| `--pull <always | missing | never>` |
--force-recreate | 强制重建所有容器(即使配置 / 镜像未变) | docker compose up -d --force-recreate |
--no-recreate | 不重建已运行的容器(仅启动未运行的) | docker compose up -d --no-recreate |
--renew-anon-volumes | 重新创建匿名卷(会丢失匿名卷数据) | docker compose up -d --renew-anon-volumes |
| 选项 | 作用 | 示例 |
|---|---|---|
--no-deps | 不启动目标服务的依赖服务 | docker compose up -d --no-deps web |
--wait | 等待服务进入「健康状态」后退出 | docker compose up --wait |
--wait-timeout <秒> | --wait 的超时时间(默认 60 秒) | docker compose up --wait --wait-timeout 120 |
scale 命令)| 选项 | 作用 | 示例 |
|---|---|---|
--scale <服务名>=<实例数> | 调整服务的容器实例数 | docker compose up -d --scale web=5 |
--remove-orphans | 删除不属于当前配置的「孤立容器」 | docker compose up -d --scale web=2 --remove-orphans |
| 选项 | 作用 | 示例 |
|---|---|---|
--quiet-pull | 拉取镜像时静默输出 | docker compose up -d --quiet-pull |
--dry-run | 模拟执行(仅输出要执行的操作) | docker compose up --dry-run |
--no-start | 仅创建容器 / 网络 / 卷,不启动容器 | docker compose up --no-start |
# 前台启动所有服务(日志实时输出,按 Ctrl+C 停止)
docker compose up
# 后台启动所有服务(生产/测试环境常用)
docker compose up -d
# 生产环境配置 + 自定义项目名
docker compose -f docker-compose.prod.yml -p myapp-prod up -d
# 重新构建镜像 + 后台启动,确保使用最新代码
docker compose up -d --build
# 将 web 服务扩到 4 实例,清理孤立容器
docker compose up -d --scale web=4 --remove-orphans
# 缩容到 2 实例
docker compose up -d --scale web=2 --remove-orphans
# 仅启动 web 服务,不启动 db/redis 等依赖
docker compose up -d --no-deps web
# 修改配置后,强制重建所有容器,确保配置生效
docker compose up -d --force-recreate
# 启动服务并等待健康检查通过,用于自动化测试
docker compose up --wait --wait-timeout 120
8080:80),会因端口冲突失败,需改为随机端口(如 80);depends_on 仅保证「启动顺序」,不保证「服务就绪」;healthcheck + depends_on.condition: service_healthy 实现「就绪后启动」(Compose 3.9+ 支持)。--renew-anon-volumes 会删除匿名卷数据,生产环境慎用;deploy.resources)仅对 Swarm 生效,单机需通过 --memory/--cpus 等 Docker 原生参数(需在 command 中配置)。docker compose down 联动docker compose up 会复用之前创建的网络 / 卷(除非用 down -v 删除);docker compose down -v(删除容器 / 网络 / 卷),再执行 up。# 方式 1:前台启动,查看实时日志
docker compose up <服务名>
# 方式 2:查看已创建容器的日志
docker compose logs <服务名>
# 强制拉取最新镜像
docker compose up -d --pull always
# 检查镜像名称/仓库是否正确
docker compose config
# 检查依赖配置
docker compose config | grep depends_on
# 手动启动依赖服务
docker compose up -d <依赖服务名>
# 加 --remove-orphans 清理孤立容器
docker compose up -d --scale <服务名>=<目标数> --remove-orphans
# 手动删除孤立容器
docker compose rm -f <孤立容器名>
docker compose up(实时查看日志,便于调试);docker compose up -d --build(快速更新镜像)。docker compose up -d --wait;docker compose down -v(删除容器 / 网络 / 卷)。docker compose up -d --no-recreate;docker compose up -d --pull always --no-recreate <服务名>;docker compose up -d --scale <服务名>=<实例数> --remove-orphans;docker compose up -d --force-recreate --no-build <服务名>。docker compose up --dry-run(检查配置语法、端口冲突等);docker compose config(确认变量、依赖等生效)。docker compose up 是 Compose 服务启动的「一站式命令」,核心能力覆盖「构建→创建→启动→扩缩容」全流程。掌握其核心参数(如 -d、--scale、--force-recreate、--build),并结合不同环境的需求选择参数组合,可高效实现单机多服务的部署与更新。
docker compose logsdocker compose logs 是 Docker Compose 中用于查看容器化服务日志的核心命令,支持实时跟踪、筛选、格式化等操作,是排查服务运行异常的关键工具。
# 基础用法:查看所有服务的日志
docker compose logs
# 查看指定单个/多个服务的日志(最常用)
docker compose logs <服务名 1>[服务名 2]
# 示例(compose 中有 web、db、redis 服务)
docker compose logs web
# 仅查看 web 服务日志
docker compose logs web db
# 查看 web + db 服务日志
| 参数 | 缩写 | 作用 | 实用示例 |
|---|---|---|---|
--follow | -f | 实时跟踪日志(类似 tail -f),持续输出新日志 | docker compose logs -f web |
--timestamps | -t | 显示每条日志的精确时间戳(含年月日时分秒) | docker compose logs -t web |
--tail | -n | 仅显示最后 N 行日志(-n 是旧版兼容写法) | docker compose logs --tail 100 web |
--since | - | 筛选指定时间之后的日志(支持绝对 / 相对时间) | docker compose logs --since 1h web |
--until | - | 筛选指定时间之前的日志 | docker compose logs --since 2h --until 1h web |
--quiet | -q | 仅输出日志所属的容器 ID,不显示日志内容 | docker compose logs -q web |
--no-log-prefix | - | 隐藏日志前缀(默认前缀:服务名_容器 ID_序号) | docker compose logs --no-log-prefix web |
--details | - | 显示额外日志详情(如容器 ID、服务名等元数据) | docker compose logs --details web |
--color | - | 强制开启 / 关闭日志颜色(auto/always/ never) | docker compose logs --color always web |
--filter | -f | 按条件过滤日志(仅支持 Docker 日志驱动为 json-file/journald) | docker compose logs --filter "status=exited" web |
docker compose logs -f -t web # 最常用:实时看 + 时间戳,便于定位问题时间点
docker compose logs -t --tail 200 db # 查看数据库最后 200 行日志(带时间)
# 查看今天 10 点到 11 点的 web 日志
docker compose logs --since 2025-12-16 10:00:00 --until 2025-12-16 11:00:00 web
# 查看最近 30 分钟的 redis 日志(相对时间)
docker compose logs --since 30m redis
docker compose logs -f --no-log-prefix web # 仅显示日志内容,无服务/容器前缀
# 实时查看 web 服务最近 100 行、带时间戳的日志
docker compose logs -f -t --tail 100 web
默认日志每行前缀格式:[服务名] [容器 ID 前 12 位] [日志内容],示例:
web_1 | 2025-12-16 10:05:23 [INFO] Server started on port 8080
db_1 | 2025-12-16 10:05:25 [Note] mysqld: ready for connections.
使用 --no-log-prefix 可移除前缀,仅保留日志内容。
docker compose logs 仅支持 Docker 日志驱动为 json-file(默认)、journald 的场景;syslog、fluentd 等,需通过对应驱动的工具查看日志(如 journalctl 查看 journald 日志)。若日志包含中文乱码,可通过管道转码:
# Linux/macOS
docker compose logs web | iconv -f GBK -t UTF-8
# Windows(PowerShell)
docker compose logs web | Out-File -Encoding utf8 web-logs.txt
清理过大的日志(谨慎操作,Linux):
truncate -s 0 $(docker inspect --format='{{.LogPath}}'<容器 ID>)
查看单个服务日志文件路径:
# 先获取服务对应的容器 ID
docker compose ps -q web
# 查看日志文件路径
docker inspect --format='{{.LogPath}}'<容器 ID>
docker compose logs(无短横线);docker-compose logs(有短横线);docker compose version 查看版本。默认日志按时间正序输出,若需倒序(最新日志在前),可结合系统命令:
# Linux/macOS
docker compose logs --tail 100 web | tac
docker compose ps <服务名>;docker compose up -d <服务名>;json-file:docker inspect --format='{{.HostConfig.LogConfig.Type}}' <容器 ID>。--follow 中断,需重新执行命令;systemctl status docker(Linux)。Dockerfile 中设置时区。docker compose logs 是 Compose 服务日志排查的核心工具,核心掌握 -f(实时)、-t(时间戳)、--tail(行数)、--since/--until(时间筛选)四个参数,可覆盖绝大多数日志查看场景。结合日志驱动、编码、清理等细节,能高效定位服务运行中的问题。
docker compose builddocker compose build 是 Docker Compose 中用于构建 / 重新构建 Compose 配置中定义的服务镜像的核心命令,适用于自定义镜像(基于 Dockerfile)的场景。
# 基础用法:构建所有服务的镜像
docker compose build
# 构建指定单个/多个服务的镜像(常用)
docker compose build <服务名 1>[服务名 2]
# 示例(compose 中有 web、db、redis 服务)
docker compose build web
# 仅构建 web 服务
docker compose build web db
# 构建 web + db 服务
| 参数 | 作用 | 示例 |
|---|---|---|
--no-cache | 构建时不使用缓存(强制重新下载依赖 / 执行所有步骤) | docker compose build --no-cache web |
--pull | 构建前尝试拉取最新的基础镜像(如 FROM nginx:alpine) | docker compose build --pull web |
--force-rm | 构建过程中删除临时容器(避免残留) | docker compose build --force-rm web |
-q / --quiet | 静默模式,仅输出最终镜像 ID(减少冗余日志) | docker compose build -q web |
--build-arg | 传递构建参数(对应 Dockerfile 中的 ARG) | docker compose build --build-arg VERSION=1.0 web |
--progress | 指定构建进度展示方式(auto/plain/ tty/quiet) | docker compose build --progress plain web |
--parallel | 并行构建多个服务镜像(加速多服务构建) | docker compose build --parallel web db |
--compress | 构建上下文压缩传输(适用于远程构建 / 上下文大的场景) | docker compose build --compress web |
--memory | 限制构建容器的内存(如 --memory 1g) | docker compose build --memory 2g web |
--cpu-shares | 设置构建容器的 CPU 权重 | docker compose build --cpu-shares 512 web |
适用于依赖更新、Dockerfile 逻辑修改后,避免缓存导致的构建不生效:
docker compose build --no-cache --pull web # 无缓存 + 拉取最新基础镜像
假设 Dockerfile 中有 ARG APP_PORT,compose.yml 中未定义,可通过命令行传递:
docker compose build --build-arg APP_PORT=8080 --build-arg ENV=prod web
默认构建日志会简化,用 --progress plain 可查看每一步的详细执行过程:
docker compose build --progress plain web
多服务项目中加速构建(需确保服务间无构建依赖):
docker compose build --parallel --pull web db redis
compose.yml 中 build.context 定义(默认是 Compose 文件所在目录);.dockerignore 排除的)发送给 Docker 守护进程,因此上下文目录尽量精简(避免传递大文件)。示例 compose.yml 中的构建配置:
version: '3.8'
services:
web:
build:
context: ./web-app # 构建上下文:当前目录下的 web-app 文件夹
dockerfile: Dockerfile.prod # 自定义 Dockerfile 名称(默认 Dockerfile)
args:
VERSION: 1.0 # 预设构建参数(也可通过 --build-arg 覆盖)
Dockerfile 步骤、上下文文件或基础镜像变化时,才会重新执行对应步骤;--no-cache 会完全禁用缓存,适合调试或依赖强更新的场景(但会增加构建时间)。docker compose up 的联动docker compose up 会自动检测镜像是否存在,若不存在则触发构建;docker compose up --build web # 构建 web 并启动
docker compose up --build --force-recreate web # 构建 + 强制重建容器
<项目名>_<服务名>:<标签>(标签默认 latest);--project-name(或 -p)指定:docker compose -p my-project build web # 镜像名:my-project_web:latest
.dockerignore 文件,排除无关文件(如 node_modules/、logs/、.git/);--no-cache 强制重建,或修改 Dockerfile 中对应步骤的内容(如添加 RUN echo $(date) 打破缓存);Dockerfile 中用 ARG 定义参数(而非 ENV),且命令行 --build-arg 拼写正确;docker pull nginx:alpine)后再构建。docker-compose.ymlversion: '3.8'
services:
app:
build:
context: ./app # 构建上下文:app 目录
dockerfile: Dockerfile # 自定义 Dockerfile(默认可省略)
args:
NODE_ENV: production # 预设构建参数
ports:
- "3000:3000"
db:
image: mysql:8.0 # 无需构建(直接使用官方镜像)
environment:
- MYSQL_ROOT_PASSWORD=123456
app 服务镜像# 基础构建
docker compose build app
# 强制重新构建(无缓存 + 拉取最新基础镜像)
docker compose build --no-cache --pull app
# 传递自定义构建参数(覆盖预设的 NODE_ENV)
docker compose build --build-arg NODE_ENV=development app
docker compose build 是自定义镜像场景的核心命令,核心价值是统一管理多服务的构建流程,结合参数可灵活控制构建行为(缓存、参数、并行等)。日常使用中,优先掌握 --no-cache、--pull、--build-arg 三个参数,可解决 90% 以上的构建需求。
docker compose configdocker compose config 是 Docker Compose 中用于验证、解析并输出最终生效的 Compose 配置的核心命令,核心价值是排查配置语法错误、查看变量 / 扩展后的最终配置、确认多文件合并结果,是调试 Compose 配置的必备工具。
# 基础用法:验证并输出当前目录下 compose.yml 的最终配置
docker compose config
# 指定自定义 Compose 文件(覆盖默认的 compose.yml/compose.yaml)
docker compose -f <文件 1> -f <文件 2> config
# 仅验证配置(不输出内容)
docker compose config --quiet
# 示例
docker compose -f docker-compose.yml -f docker-compose.override.yml config
# 合并多文件并输出
docker compose config --services
# 仅列出所有服务名
| 参数 | 作用 | 实用示例 |
|---|---|---|
--quiet | -q | 仅验证配置语法是否合法,无输出(成功返回 0,失败返回非 0) |
--services | - | 仅输出 Compose 配置中定义的所有服务名(按字母排序) |
--volumes | - | 仅输出配置中定义的所有卷(命名卷 / 匿名卷) |
--networks | - | 仅输出配置中定义的所有网络 |
--images | - | 仅输出配置中所有服务对应的镜像名 |
--resolve-image-digests | - | 将镜像标签(如 nginx:alpine)解析为具体的镜像摘要(sha256:…) |
--no-interpolate | - | 禁用变量插值(不替换 ${VAR} 等环境变量),保留原始配置 |
--format | - | 指定输出格式(默认 yaml,支持 json) |
--dry-run | - | (兼容旧版)等同于默认行为,输出解析后的配置 |
编写 Compose 配置后,先通过 config 验证是否有语法错误(如缩进、关键字拼写、变量未定义等),避免启动时报错:
# 验证并输出错误(如有)
docker compose config
# 仅验证,无输出(脚本中常用,通过返回值判断)
if docker compose config -q; then
echo "配置合法"
else
echo "配置错误"
exit 1
fi
Compose 配置中常使用 ${ENV_VAR} 环境变量或 .env 文件中的变量,config 会输出变量替换后的最终配置,便于确认变量是否生效:
# 示例:.env 文件中有 APP_PORT=8080,compose.yml 中 ports: ["${APP_PORT}:80"]
docker compose config
# 输出中会显示 ports: ["8080:80"]
Compose 支持多文件合并(如 docker-compose.yml + docker-compose.override.yml),config 会输出合并后的完整配置,排查覆盖逻辑问题:
# 合并主配置和覆盖配置并输出
docker compose -f docker-compose.yml -f docker-compose.prod.yml config
快速获取配置中的核心元素,避免翻阅冗长配置文件:
# 列出所有服务名
docker compose config --services
# 输出:web db redis
# 列出所有镜像
docker compose config --images
# 输出:nginx:alpine mysql:8.0 redis:latest
# 列出所有卷
docker compose config --volumes
# 输出:data-volume app-cache
# 列出所有网络
docker compose config --networks
# 输出:default app-network
将镜像标签解析为不可变的摘要,避免因标签更新导致镜像不一致:
docker compose config --resolve-image-digests
# 输出示例:image: nginx@sha256:abc123...(而非 nginx:alpine)
如需确认配置中未替换的变量原始写法,使用 --no-interpolate:
docker compose config --no-interpolate
# 输出示例:ports: ["${APP_PORT}:80"](保留变量,不替换)
通过 --format json 将配置转为 JSON 格式,方便用 jq 等工具解析:
# 输出 JSON 格式配置
docker compose config --format json
# 结合 jq 提取 web 服务的端口
docker compose config --format json | jq '.services.web.ports'
docker compose config 会严格按照 Compose 的优先级规则解析最终配置,优先级从高到低:
-f 指定的文件、--env-file);COMPOSE_PROFILES、COMPOSE_PROJECT_NAME);.env 文件中的变量;environment 字段;通过 config 可直观看到这些规则生效后的最终结果。
port 误写为 ports);depends_on);当通过 -f 指定多个 Compose 文件时,config 会按后指定的文件覆盖先指定的文件的规则合并:
示例:
# docker-compose.yml 中 web 服务 ports: ["80:80"]
# docker-compose.prod.yml 中 web 服务 ports: ["8080:80"]
docker compose -f docker-compose.yml -f docker-compose.prod.yml config
# 最终 web 服务 ports 为 ["8080:80"](后文件覆盖)
-p/--project-name 指定项目名,config 会输出该项目名下的配置:docker compose -p my-project config # 输出 my-project 项目的配置
config 兼容所有 Compose 文件版本(如 2.x、3.x),会自动适配不同版本的语法规则,输出符合当前 Docker 版本支持的最终配置。
${VAR} 未在 .env 或环境变量中定义);restart: always 误写为 restart: alway)。--no-interpolate 查看原始变量,确认变量名拼写;.env 文件路径(默认在 Compose 文件同级目录,可通过 --env-file 指定);.env 文件。-f 指定顺序逐一验证:先单独查看第一个文件 docker compose -f 文件 1 config,再查看合并后的;config 会提示重复定义的错误,需检查多文件中是否有重复的服务 / 卷 / 网络名称。docker compose config 是 Compose 配置调试的'瑞士军刀',核心场景包括:验证配置语法、查看变量 / 多文件合并后的最终配置、提取服务 / 镜像 / 卷等关键信息。掌握 --quiet(验证)、--services(列服务)、--format json(脚本解析)三个核心参数,可高效解决 Compose 配置的绝大多数调试问题。
docker compose execdocker compose exec 是 Docker Compose 中用于在运行中的服务容器内执行命令的核心命令,相当于 docker exec 的 Compose 封装,支持直接通过「服务名」定位容器(无需记容器 ID),是日常运维、调试容器的高频工具。
# 基础用法:在指定服务的容器内执行命令
docker compose exec <服务名><命令>[命令参数]
# 示例(compose 中有 web、db、redis 服务)
docker compose exec web ls /app # 在 web 容器内执行 ls /app
docker compose exec db mysql -uroot -p # 在 db 容器内登录 mysql
docker compose exec redis redis-cli # 在 redis 容器内执行 redis-cli
# 执行交互式命令(如 bash/sh,最常用)
docker compose exec <服务名> bash # 进入容器的 bash 终端
docker compose exec <服务名> sh # 轻量容器(如 alpine)用 sh
# 指定用户执行命令(避免 root 权限)
docker compose exec -u <用户名/UID><服务名><命令>
# 针对多实例服务(scale 部署),指定具体容器实例
docker compose exec --index <实例序号><服务名><命令>
| 参数 | 缩写 | 作用 | 实用示例 |
|---|---|---|---|
--user | -u | 指定执行命令的用户(用户名 / UID/GID) | docker compose exec -u appuser web ls /app |
--interactive | -i | 保持标准输入(STDIN)打开(即使未附加),配合 -t 用 | docker compose exec -i web cat > /app/file.txt |
--tty | -t | 分配伪终端(PTY),使交互更友好(如 bash 颜色) | docker compose exec -it web bash |
--index | - | 指定服务的实例序号(多实例部署时,默认选第一个) | docker compose exec --index 2 web bash |
--workdir | -w | 指定命令执行的工作目录(替代容器默认工作目录) | docker compose exec -w /app web npm run build |
--env | -e | 设置环境变量(临时覆盖容器原有环境变量) | docker compose exec -e NODE_ENV=test web node app.js |
--privileged | - | 以特权模式执行命令(突破容器权限限制,谨慎使用) | docker compose exec --privileged web mount /dev/sda1 /mnt |
--no-TTY | - | 禁用伪终端(适合脚本执行,避免输出乱码) | docker compose exec --no-TTY web sh -c "echo $PATH" |
--detach | -d | 后台执行命令(不阻塞终端,返回命令 PID) | docker compose exec -d web sh -c "nohup python app.py &" |
# 进入 web 容器的 bash(带伪终端 + 交互)
docker compose exec -it web bash
# 轻量镜像(如 alpine)无 bash,用 sh
docker compose exec -it web sh
# 以 www-data 用户执行命令
docker compose exec -u www-data web touch /var/www/html/test.txt
# 以 UID=1000、GID=1000 执行(避免用户名不存在)
docker compose exec -u 1000:1000 web id
# 输出 uid=1000 gid=1000
# 不进入容器,直接在 /app 目录执行 npm 安装
docker compose exec -w /app web npm install
# 对比:默认工作目录执行 vs 指定目录
docker compose exec web pwd
# 输出容器默认工作目录(如 /)
docker compose exec -w /app web pwd
# 输出 /app
# 临时设置数据库密码,执行查询
docker compose exec -e MYSQL_PWD=123456 db mysql -uroot -e "show databases;"
# 多环境变量
docker compose exec -e ENV=prod -e PORT=8080 web node server.js
# 先启动 3 个 web 实例
docker compose up -d --scale web=3
# 进入第二个 web 实例
docker compose exec --index 2 web bash
# 查看每个实例的 IP
for i in {1..3}; do
docker compose exec --index $i web hostname -I
done
# 后台执行数据备份
docker compose exec -d db sh -c "mysqldump -uroot -p123456 app_db > /backup/db_$(date +%Y%m%d).sql"
# 查看后台命令的进程(进入容器后)
docker compose exec db ps aux | grep mysqldump
# 本地创建文件内容,写入容器的 /app/test.txt
cat local-file.txt | docker compose exec -i web sh -c "cat > /app/test.txt"
# 交互式输入内容到容器文件
docker compose exec -i web sh -c "cat > /app/input.txt"
# 此时输入内容,按 Ctrl+D 结束输入
docker exec 的区别| 特性 | docker compose exec | docker exec |
|---|---|---|
| 定位容器 | 通过「服务名」(无需记容器 ID) | 必须指定「容器 ID / 容器名」 |
| 多实例支持 | --index 直接选实例 | 需手动指定对应实例的容器 ID |
| 项目隔离 | 自动匹配当前 Compose 项目的容器 | 需手动区分不同项目的容器 |
| 环境集成 | 自动继承 Compose 项目的网络 / 卷等配置 | 需手动指定网络 / 卷等 |
docker compose ps <服务名> 查看状态为 Up);--index=1);bash、mysql 等),否则报错 exec: "bash": executable file not found in $PATH。--privileged 会赋予命令主机级别的权限,可能带来安全风险,仅在必要时使用;root 用户执行非必要命令,优先用 -u 指定普通用户;-e 指定的变量 > 容器原有环境变量 > Compose 配置的 environment;# 正确:容器内执行 `echo $PATH`($PATH 由容器解析)
docker compose exec web sh -c "echo \$PATH"
# 错误:$PATH 被宿主机 Shell 解析,而非容器
docker compose exec web echo $PATH
-t 或用 --no-TTY:# 错误示例(脚本中用 -t 导致输出乱码)
docker compose exec -t web sh -c "echo hello"
# 正确示例(禁用伪终端)
docker compose exec --no-TTY web sh -c "echo hello"
docker compose exec(无短横线);docker-compose exec(有短横线);docker compose version 查看版本。docker compose up -d <服务名>,再执行 exec。sh 替代 bash),或安装对应工具(apk add bash)。-t 参数,未分配伪终端;docker compose exec -it <服务名> bash。--index 指定健康的实例,或重启服务 docker compose restart <服务名>。-u root 用 root 执行(临时),或调整容器内文件权限。docker compose exec 是 Compose 容器运维的核心命令,核心掌握 -it(交互式终端)、-u(指定用户)、-w(工作目录)、--index(多实例)四个参数,可覆盖 90% 以上的容器内命令执行场景。注意区分与 docker exec 的差异、避免伪终端在脚本中的坑,能高效完成容器内的调试和操作。
docker compose scaledocker compose scale 是 Docker Compose 中用于调整运行中服务的容器实例数量的命令,核心作用是快速扩缩容单个 / 多个服务(如把 web 服务从 1 个实例扩到 5 个)。需要注意的是:该命令在 Compose V2 中已被 docker compose up --scale 替代(标记为废弃),但仍兼容旧版用法。
# 基础用法:指定单个服务的实例数
docker compose scale <服务名>=<实例数>
# 扩缩容多个服务
docker compose scale <服务名 1>=<实例数 1><服务名 2>=<实例数 2>
# 示例:将 web 服务扩到 3 个实例,db 服务保持 1 个
docker compose scale web=3 db=1
scale 命令已废弃,官方推荐用 up --scale(支持更多参数,如 -d 后台运行):
# 扩缩容服务(需加 -d 避免阻塞终端)
docker compose up -d --scale <服务名>=<实例数>
# 示例:扩 web 到 3 个实例,不重启其他服务
docker compose up -d --scale web=3
up --scale 为主)| 参数 | 作用 | 实用示例 |
|---|---|---|
-d | 后台运行扩缩容后的容器(必加,否则阻塞终端) | docker compose up -d --scale web=3 |
--no-recreate | 不重建已运行的容器(仅新增 / 删除实例,避免中断) | docker compose up -d --scale web=3 --no-recreate |
--force-recreate | 强制重建所有实例(扩缩容同时重启容器,谨慎用) | docker compose up -d --scale web=3 --force-recreate |
--no-start | 仅创建容器但不启动(用于预配置) | docker compose up -d --scale web=3 --no-start |
--remove-orphans | 删除不属于当前扩缩容配置的孤立容器(如缩容时清理多余实例) | docker compose up -d --scale web=2 --remove-orphans |
# 旧版:扩 web 服务到 5 个实例
docker compose scale web=5
# 新版(推荐):后台扩 web 到 5 个实例,不重启现有容器
docker compose up -d --scale web=5 --no-recreate
# 旧版:将 web 从 5 个实例缩到 2 个
docker compose scale web=2
# 新版:缩容并清理多余容器(--remove-orphans 确保删除多余实例)
docker compose up -d --scale web=2 --remove-orphans
# 旧版:web 扩到 3 个,redis 扩到 2 个
docker compose scale web=3 redis=2
# 新版:多服务扩缩容(后台运行 + 不重建现有容器)
docker compose up -d --scale web=3 --scale redis=2 --no-recreate
# 扩 web 到 4 个实例,且强制重启所有 web 容器(加载新配置)
docker compose up -d --scale web=4 --force-recreate
<项目名>_<服务名>_<序号>(如 myapp_web_1、myapp_web_2);web_5、web_4、web_3);ports: ["8080:80"]),扩容时会因端口冲突失败!需改为「随机端口」(如 ports: ["80"])或使用负载均衡(如 Nginx/Traefik)。扩缩容的核心前提是服务不绑定固定宿主机端口,示例:
# 错误配置(固定端口,扩容失败)
services:
web:
image: nginx
ports: ["8080:80"]
# 多个实例会争抢 8080 端口
# 正确配置(随机宿主机端口,扩容无冲突)
services:
web:
image: nginx
ports: ["80"]
# Docker 会分配随机宿主机端口(如 32768:80、32769:80 等)
services:
web:
image: nginx
volumes:
- app-data:/app # 命名卷,所有实例共享
volumes:
app-data: # 定义命名卷
docker compose ps 联动(验证扩缩容结果)扩缩容后,可通过 ps 查看所有实例状态:
docker compose ps web
# 列出所有 web 实例
# 输出示例:
# NAME COMMAND STATUS PORTS
# myapp_web_1 "/docker-entrypoint.…' Up 2 minutes 0.0.0.0:32768->80/tcp
# myapp_web_2 "/docker-entrypoint.…' Up 2 minutes 0.0.0.0:32769->80/tcp
# myapp_web_3 "/docker-entrypoint.…' Up 2 minutes 0.0.0.0:32770->80/tcp
docker compose scale 已标记为「废弃」,执行时会提示:WARNING: The scale command is deprecated. Use the up command with --scale instead.;scale 仅能调整实例数,而 up --scale 可结合 -d、--no-recreate 等参数,更灵活且兼容 Compose 的完整生命周期管理。deploy.replicas(Swarm 模式):scale/--scale 仅适用于单机 Compose,Swarm 需用 docker service scale;depends_on 且依赖服务未启动:需先启动依赖服务;8080:80);ports: ["80"]),或使用负载均衡器统一入口。--remove-orphans(新版),或旧版 scale 未清理孤立容器;docker compose up -d --scale <服务名>=<目标数> --remove-orphans,或手动删除:docker compose rm -f <多余容器名>。scale 命令;docker compose up -d --scale <服务名>=<实例数>。docker compose scale 是单机 Compose 扩缩容的快捷命令,但已被新版 up --scale 替代。核心使用要点:
docker compose up -d --scale <服务名>=<实例数>;--remove-orphans 清理多余容器。该命令适合单机测试 / 小规模扩缩容,生产环境大规模扩缩容建议使用 Docker Swarm/K8s 等编排工具。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online