Appearance
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 -ddown — 停止并清理
bash
# 停止并删除容器、网络
docker compose down
# 同时删除数据卷
docker compose down -v
# 同时删除构建的镜像
docker compose down --rmi local
# 删除所有(容器 + 网络 + 卷 + 镜像)
docker compose down -v --rmi allstart / 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 -atop — 查看容器进程
bash
docker compose top
docker compose top apistats — 资源使用情况
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.jsrun — 运行一次性任务
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 apiexec vs run 的区别:
exec | run | |
|---|---|---|
| 目标容器 | 已运行的容器 | 创建新容器 |
| 适用场景 | 调试运行中服务 | 执行一次性任务 |
| 依赖服务 | 不启动 | 会启动 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 | 验证配置文件 |