2014-12-16 3 views
7

TL zu sehen; DR: Komponist installiert werden kann, wenn die Post-Installationsskripts können nicht sehen, einen MySQL-ServerKomponist installieren schlägt fehl, wenn nicht in der Lage MySQL-Datenbank

Ich baue einen Docker Behälter für eine Symfony-Anwendung, und während des Build ich etwas tun, wie diese

RUN export SYMFONY_ENV=prod && \ 
    composer install --prefer-dist --optimize-autoloader 

Gegen Ende des installieren, ist es nicht mit diesem

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. 

Nun, ich könnte u se --no-scripts aber dann würde ich wahrscheinlich composer install wieder starten müssen, nachdem ich einen Container gestartet habe, und ich möchte, dass mein Container so bereit wie möglich ist.

Da ich nicht viele Verweise auf ähnliche Probleme gefunden habe, könnte etwas in meiner Anwendung Fehler haben, und ich vermute, dass ich meine eigene Frage beantworten werde. Meine Hoffnung war, dass ich es bei der Beschreibung herausfinden würde. Ach, ich habe nicht. Hinweise sind willkommen :)

+0

Sie kein DB-Verbindung in Ihrem Projekt? – Matteo

+1

ja, aber es ist nicht bekannt/verfügbar, wenn der Container gebaut wird –

+0

[hier] (https://speakerdeck.com/ubermuda/a-multi-container-symfony2-setup-with-docker?slide=31) zuerst installieren/Starten Sie die Dienste vor der Composer-Aufgabe. Hope this help – Matteo

Antwort

5

Doctrine eingeführt einige Code, der versucht, Dinge über die Datenbank ziemlich eifrig zu erkennen.

Eine Problemumgehung besteht darin, Doctrine einfach die Zielserverversion mitzuteilen, z.

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

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

+0

Hatten Sie Glück, Ihre Abhängigkeiten zu installieren, ohne dass die Post-Installationsskripte versuchen, sich mit der Datenbank zu verbinden? – Onema

+0

@Onema siehe aktualisierte Antwort! –