当无法看到MySQL数据库时,使用composer install失败

7
TL;DR: 当post-install脚本无法查看MySQL服务器时,composer install会失败。
我正在构建一个用于Symfony应用程序的Docker容器,在构建过程中,我执行了以下操作。
RUN export SYMFONY_ENV=prod && \
  composer install --prefer-dist --optimize-autoloader

在安装接近尾声时,出现以下错误:
Generating optimized autoload files


  [Doctrine\DBAL\Exception\DriverException]                                                                  
  An exception occured in driver: SQLSTATE[HY000] [2003] Can't connect to MySQL server on '127.0.0.1' (111)  

  [Doctrine\DBAL\Driver\PDOException]                                        
  SQLSTATE[HY000] [2003] Can't connect to MySQL server on '127.0.0.1' (111)  

  [PDOException]                                                             
  SQLSTATE[HY000] [2003] Can't connect to MySQL server on '127.0.0.1' (111)  


Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache handling the post-install-cmd event terminated with an exception

  [RuntimeException]                                                         
  An error occurred when executing the "'cache:clear --no-warmup'" command.  

现在,我可以使用--no-scripts,但是这样我可能需要在启动容器后再次运行composer install,而我希望我的容器尽可能准备就绪。

由于我没有找到许多类似问题的参考资料,可能是我的应用程序有问题,我怀疑我会回答自己的问题。 我的希望是通过描述它来弄清楚。 不幸的是,我没有。 欢迎提供线索 :)


你的项目中没有使用数据库连接吗? - Matteo
2
是的,但在构建容器时不知道/不可用。 - Paul Dixon
请先安装/启动服务,然后再运行Composer任务。希望这能帮到您。 - Matteo
1个回答

5

Doctrine引入了一些代码,试图非常积极地自动检测数据库的一些信息。

一个解决方法就是简单地告诉Doctrine目标服务器的版本,例如:

doctrine:
    dbal:
        default_connection: default
        connections:
            default:
                dbname:   Symfony2
                user:         root
                password: null
                host:         localhost
                driver:       pdo_mysql
                server_version: 5.6

请见https://github.com/doctrine/DoctrineBundle/issues/351#issuecomment-75456547

你有没有成功安装依赖项而不让后安装脚本尝试连接到数据库? - Onema

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接