Skip to content

Compose 常用命令

命令格式

bash
docker compose [选项] <命令> [参数]

# 在 docker-compose.yml 所在目录执行
# 或者用 -f 指定文件路径
docker compose -f /path/to/docker-compose.yml <>

启动与停止

up — 创建并启动服务

bash
# 启动所有服务(前台运行,Ctrl+C 停止)
docker compose up

# 后台运行(最常用)
docker compose up -d

# 重新构建镜像后启动
docker compose up -d --build

# 只启动指定服务(及其依赖)
docker compose up -d api

# 强制重新创建容器(即使配置未变)
docker compose up -d --force-recreate

# 不重新创建已在运行的容器
docker compose up -d --no-recreate

# 扩展服务实例
docker compose up -d --scale api=3

# 指定环境文件
docker compose --env-file .env.prod up -d

down — 停止并清理

bash
# 停止并删除容器、网络
docker compose down

# 同时删除数据卷
docker compose down -v

# 同时删除构建的镜像
docker compose down --rmi local

# 删除所有(容器 + 网络 + 卷 + 镜像)
docker compose down -v --rmi all

start / stop / restart

bash
# 停止服务(不删除容器)
docker compose stop
docker compose stop api mysql

# 启动已停止的服务
docker compose start
docker compose start api

# 重启服务
docker compose restart
docker compose restart api

# 暂停服务(冻结进程)
docker compose pause api

# 恢复暂停的服务
docker compose unpause api

查看状态

ps — 查看服务状态

bash
# 查看所有服务状态
docker compose ps

# 只显示 ID
docker compose ps -q

# 显示所有状态(含已停止)
docker compose ps -a

top — 查看容器进程

bash
docker compose top
docker compose top api

stats — 资源使用情况

bash
# 实时监控资源使用
docker compose stats

# 单次快照
docker compose stats --no-stream

日志

bash
# 查看所有服务日志
docker compose logs

# 实时跟踪日志
docker compose logs -f

# 查看指定服务日志
docker compose logs api
docker compose logs -f api mysql

# 查看最后 100 行
docker compose logs --tail 100 api

# 显示时间戳
docker compose logs -t api

# 组合使用
docker compose logs -f --tail 50 api

执行命令

exec — 在运行中的容器执行命令

bash
# 进入容器交互式 shell
docker compose exec api sh
docker compose exec mysql bash

# 执行单条命令
docker compose exec mysql mysql -uroot -psecret
docker compose exec api node -e "console.log('hello')"

# 以指定用户执行
docker compose exec --user root api bash

# 设置环境变量
docker compose exec -e DEBUG=true api node app.js

run — 运行一次性任务

bash
# 运行一次性命令(创建新容器,不复用运行中的)
docker compose run api npm run migrate
docker compose run api npm test

# 运行后自动删除容器
docker compose run --rm api npm run migrate

# 不启动 depends_on 的依赖
docker compose run --no-deps api npm run lint

# 覆盖端口映射
docker compose run -p 8080:80 api

exec vs run 的区别:

execrun
目标容器已运行的容器创建新容器
适用场景调试运行中服务执行一次性任务
依赖服务不启动会启动 depends_on

构建镜像

bash
# 构建所有服务的镜像
docker compose build

# 构建指定服务
docker compose build api

# 不使用缓存
docker compose build --no-cache

# 并行构建
docker compose build --parallel

# 构建完成后推送
docker compose build && docker compose push

镜像推送和拉取

bash
# 推送所有服务镜像到仓库
docker compose push

# 拉取所有服务的最新镜像
docker compose pull

# 只拉取特定服务
docker compose pull mysql redis

配置验证

bash
# 验证 Compose 文件语法并显示解析结果
docker compose config

# 只显示服务名
docker compose config --services

# 只显示卷名
docker compose config --volumes

多文件合并

bash
# 合并多个 Compose 文件
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d

# 使用不同的项目名称(避免与其他项目冲突)
docker compose -p myproject up -d

实用脚本示例

部署脚本

bash
#!/bin/bash
# deploy.sh

set -e

echo "Pulling latest images..."
docker compose pull

echo "Building custom images..."
docker compose build --no-cache

echo "Running database migrations..."
docker compose run --rm api npm run migrate

echo "Starting services..."
docker compose up -d --remove-orphans

echo "Waiting for health checks..."
sleep 10

echo "Checking service status..."
docker compose ps

echo "Deployment complete!"

备份脚本

bash
#!/bin/bash
# backup.sh

BACKUP_DIR="/backups/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR

echo "Backing up MySQL..."
docker compose exec -T mysql mysqldump \
  -uroot -p${MYSQL_ROOT_PASSWORD} \
  --all-databases \
  > $BACKUP_DIR/mysql.sql

echo "Backing up volumes..."
docker compose exec -T api tar czf - /app/uploads \
  > $BACKUP_DIR/uploads.tar.gz

echo "Backup complete: $BACKUP_DIR"

常用别名配置

~/.bashrc~/.zshrc 中添加:

bash
alias dc='docker compose'
alias dcu='docker compose up -d'
alias dcd='docker compose down'
alias dcl='docker compose logs -f'
alias dcp='docker compose ps'
alias dcr='docker compose restart'

总结

Docker Compose 常用命令速查:

命令说明
up -d后台启动所有服务
down停止并删除容器/网络
down -v同上,并删除数据卷
ps查看服务状态
logs -f实时查看日志
exec <服务> sh进入容器
run --rm <服务> <命令>运行一次性任务
build构建镜像
pull拉取最新镜像
restart <服务>重启服务
config验证配置文件