Compose 常用命令速查:up、down、exec、logs

Docker Compose 常用命令一张表:启动停止、看日志、进容器、更新重建、扩缩容、启停暂停。收藏这篇,敲命令不用再翻文档。

我是小够,只推够用的 VPS。

这个月最后一篇,送张速查表。Compose 常用命令都在这,收藏备用。注意都是 docker compose(空格),不是老式的 docker-compose(短横线)。

生命周期

docker compose up -d          # 启动(后台)
docker compose up             # 启动(前台看日志,Ctrl+C 停)
docker compose down           # 停掉并删容器(数据卷保留)
docker compose down -v        # 停掉连数据卷一起删(危险,确认备份)
docker compose restart        # 重启所有服务
docker compose restart web    # 只重启 web 服务
docker compose pull           # 拉取最新镜像(不重建容器)
docker compose up -d --build  # 重新构建镜像并启动
docker compose create         # 只创建容器不启动(少用,知道就行)
docker compose rm             # 删除已停的容器

up 和 down 是最常用的,记住:up 是"按文件描述把环境建起来",down 是"拆掉"。down 默认不动数据卷和网络,down -v 才会连卷一起删——删之前想清楚。

查看状态

docker compose ps             # 容器状态
docker compose ps -a          # 包括停掉的
docker compose logs -f        # 跟踪所有日志
docker compose logs -f web    # 只看 web 服务的日志
docker compose logs --tail 50 # 只看最后 50 行
docker compose top            # 容器里跑的进程
docker compose config         # 校验 compose 文件并打印解析结果
docker compose images         # 列出项目用的镜像
docker compose port web 80    # 查 web 服务 80 端口映射到主机的哪个端口
docker compose ls             # 列出所有 compose 项目

docker compose ls 适合一台机器跑多个项目的:看看都有谁在跑,项目名、配置文件路径一目了然。config 是改完文件的免费校验器,这个月提过三次了,重要的话说三遍。

进容器操作

docker compose exec web sh       # 进 web 容器开 shell(alpine 用 sh,ubuntu/debian 用 bash)
docker compose exec db mysql -uroot -p  # 在 db 容器里执行命令
docker compose run --rm web sh   # 起个一次性容器,用完即删(--rm)
docker compose cp web:/app/config.yml ./  # 从容器拷文件出来

exec 是进正在运行的容器,run 是新起一个,别搞混。exec 进不去时先确认容器在运行(ps 看状态),Exited 的容器 exec 会报错。cp 适合拷个配置文件出来改,改完再拷回去(或干脆改成数据卷挂载,一劳永逸)。

启停暂停

docker compose stop           # 停掉容器(不删除,下次 start 继续,数据都在)
docker compose start          # 启动已停的容器
docker compose pause          # 暂停(冻结进程,状态保留在内存)
docker compose unpause        # 恢复
docker compose kill           # 强杀(SIGKILL,优雅停不掉时用)

stop 是优雅停止(先 SIGTERM,给进程 10 秒收尾),kill 是强制。pause 适合"我想冻结它但不想丢状态"的场景,比如临时让出 CPU。日常用 stop/start 就够了。

扩缩容

docker compose up -d --scale web=3  # web 服务起 3 个副本

个人用户用得少,知道有这功能就行。生产扩容还得配负载均衡,不是起几个容器就完事的。而且 --scale 和 ports 冲突:三个容器不能都映射主机的 8080,得去掉端口映射走内部网络+反代。

危险命令,再提醒一次

  • down -v:删数据卷,数据没了。
  • docker system prune -a --volumes:全清,镜像容器数据卷都没了。

敲之前默念三遍:备份了吗?备份了吗?备份了吗?这个月第一篇就讲了备份,最后一篇再提醒一次,有始有终。

组合技:日常最高频的几组

# 改完 compose 文件:校验 → 拉镜像 → 重建 → 看日志
docker compose config && docker compose pull && docker compose up -d && docker compose logs -f

# 出问题:看状态 → 看日志 → 进容器
docker compose ps -a && docker compose logs --tail 50 web && docker compose exec web sh

# 大扫除:停掉 → 删容器 → 清镜像(数据卷保留)
docker compose down && docker image prune

环境变量相关

docker compose config   # 看变量替换后的最终配置,排错神器

compose 文件里 ${VAR} 引用变量,${VAR:-default} 给默认值,没设置就用 default。.env 文件放项目目录自动加载,也可以用 --env-file 指定别的:

docker compose --env-file .env.prod up -d

版本和升级 compose 本体

docker compose version   # 看版本,v2.x 就对了

compose 是 Docker 的插件,跟着 Docker 一起更新,apt upgrade docker-ce 就行。不用单独折腾。