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 %*
脚本细节解释
@echo off:关闭命令行的命令回显,让输出更整洁for /f ...:执行docker-compose ps -q php命令,自动获取PHP容器的ID/名称,并存入PHP_CONTAINER变量(和Linux脚本里$(docker-compose ps -q php | head -1)的作用完全一致)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
相关产品推荐
相关产品推荐

