在Docker Compose中执行php artisan migrate时遇php命令未找到错误
解决Docker Compose中执行
php artisan migrate时的"php: command not found"错误 在Docker Compose环境中尝试执行
php artisan migrate命令时,mysql容器抛出错误:sh: php: command not found
问题根源
错误的核心原因是把Laravel迁移命令放到了mysql容器中执行。mysql:latest镜像仅包含数据库服务,没有安装PHP环境,自然无法识别php命令。迁移命令属于Laravel应用操作,必须在包含PHP和项目代码的app容器中执行。
修复步骤
1. 移除mysql容器的错误entrypoint配置
编辑docker-compose.yml,删除mysql服务下的entrypoint行,让mysql容器按默认逻辑启动:
mysql: image: mysql:latest volumes: - dbdata:/var/lib/mysql environment: MYSQL_DATABASE: ${DB_DATABASE} MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} MYSQL_PASSWORD: ${DB_PASSWORD} ports: - 3306:3306 # 移除以下错误配置行 # entrypoint: sh -c "sleep 30 && php artisan migrate"
2. 正确执行迁移命令
有两种可靠的执行方式:
方式一:容器启动后手动执行
先启动所有服务:
docker-compose up -d
进入app容器执行迁移:
docker-compose exec app php artisan migrate
方式二:配置app容器自动执行迁移(可选)
如果希望容器启动时自动完成迁移,可修改app服务的启动命令,同时确保mysql服务就绪后再执行迁移:
修改docker-compose.yml的app服务:
app: build: context: . working_dir: /var/www volumes: - ./:/var/www depends_on: - "mysql" ports: - 8001:80 # 添加自动迁移逻辑,先等待mysql端口可用 command: sh -c "while ! nc -z mysql 3306; do sleep 1; done && php artisan migrate --force && apache2-foreground"
注意:需要在Dockerfile中安装
netcat工具以支持nc命令,在apt-get安装列表中添加netcat-traditional:RUN apt-get update && apt-get install -y \ libfreetype6-dev \ libjpeg-dev \ libpng-dev \ libwebp-dev \ netcat-traditional \ --no-install-recommends
3. 验证修复结果
重启容器后,检查迁移状态确认执行成功:
docker-compose exec app php artisan migrate:status
内容的提问来源于stack exchange,提问作者Toma Tomov
相关产品推荐
相关产品推荐

