首页/云/云与容器速查/docker compose exec 与 run 的区别
容器与 Docker106 条

docker compose exec 与 run 的区别

exec 进入已在运行的容器执行命令(改配置、连数据库客户端);run 则新建一次性容器跑任务(数据库迁移、批处理),必要时 --rm 用完即清。

云与容器速查云更新于 2026-10-12
execdocker compose exec db mysql -uroot -p:作用于运行中容器
rundocker compose run --rm migrate:新建一次性容器
run 特性默认不发布端口、不覆盖 restart 策略、按依赖先拉起依赖服务
选择调试进现有容器用 exec;一次性任务用 run

使用示例

使用示例
docker compose exec web sh
docker compose exec db mysql -uroot -p"$MYSQL_ROOT_PASSWORD"
docker compose run --rm web npm run migrate
run 创建的容器与常驻服务共享卷/网络:迁移脚本写错库名同样会毁数据,生产操作前先备份。

易错点

  • 对停止的容器用 exec:报服务未运行,需先 up 或改用 run
  • run 当 exec 用:每敲一次多一个容器,忘了 --rm 就攒一堆

数据来源与参考

  • Docker Docs:docker compose exec
  • Docker Docs:docker compose run

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌