You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境下Docker中Symfony应用Doctrine迁移命令配置求助

解决Windows下Docker容器内执行Symfony Doctrine命令的Bat脚本方案

我来帮你搞定这个Windows下的脚本问题!先分析下你之前踩的坑:

  • 第一种写法docker exec -ti freeenergy_php_1 /bin/bash doctrine:migrations:status卡住,是因为/bin/bash后直接跟命令参数的方式不对——bash会把doctrine:migrations:status当成要读取的脚本文件名,再加上-ti开启了交互模式,自然就卡在容器里了。
  • 第二种用<重定向的写法完全错了,这个符号是用来读取本地文件内容作为输入的,不是传递命令参数,所以才会报语法错误。

正确的console.bat实现

我们要做的是和Linux脚本一样,动态获取PHP容器的标识,然后直接在容器内调用bin/console命令,同时支持传递任意参数:

@echo off
for /f "tokens=*" %%i in ('docker-compose ps -q php') do set PHP_CONTAINER=%%i
docker exec -ti %PHP_CONTAINER% php bin/console %*

脚本细节解释

  1. @echo off:关闭命令行的命令回显,让输出更整洁
  2. for /f ...:执行docker-compose ps -q php命令,自动获取PHP容器的ID/名称,并存入PHP_CONTAINER变量(和Linux脚本里$(docker-compose ps -q php | head -1)的作用完全一致)
  3. docker exec -ti %PHP_CONTAINER% php bin/console %*:在目标容器内直接执行Symfony的控制台命令,%*会把你输入的所有参数(比如doctrine:migrations:diff)原封不动传递过去

使用方法

和Linux下的用法一模一样:

  • 如果脚本就在当前目录,直接执行:
console.bat doctrine:migrations:diff
  • 要是把脚本所在目录加入系统PATH,还能简化成:
console doctrine:migrations:status

额外小提示

如果你的容器里bin/console已经设置了执行权限,也可以把命令改成docker exec -ti %PHP_CONTAINER% bin/console %*,省去前面的php。

内容的提问来源于stack exchange,提问作者progonkpa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:45:48