2016-04-04 13 views
1

Mein Stack ist ziemlich verbreitet, ein Container für meine Symfony-App, ein weiterer für Mysql. Aus irgendeinem Grund kann Symfony zu Mysql Behälter verbinden nicht mit folgenden Fehler:Symfony-Docker-Container kann keine Verbindung zu Mysql herstellen

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

Eine einfache PHP-Datei, um die MySQL-Verbindung zu testen, auf dem Symfony Behälter mit diesem hier

<?php 
$dbh = new PDO('mysql:host=database;dbname=mysite', 'mysite', 'password'); 

funktioniert, ist, Datei meine Symfony Parameter:

database_driver: pdo_mysql 
database_host: database 
database_port: 3306 
database_name: mysite 
database_user: mysite 
database_password: password 

Und hier ist meine docker-compose-Datei:

site: 
    build: webapp 
    ports : 
    - "80:80" 
    volumes: 
    - /home/myuser/dev/mysite:/var/www/html/ 
    links: 
    - database 

database: 
    image: mysql:5.5 
    ports: 
    - "3306:3306" 
    environment: 
    - MYSQL_ROOT_PASSWORD=password 
    - MYSQL_DATABASE=mysite 
    - MYSQL_USER=mysite 
    - MYSQL_PASSWORD=password 

Ich habe auch mit einem neuen Symfony-Projekt ohne Fehler versucht.

+0

Überprüfen config/param-Dateien für beide Umgebungen. Es scheint zu ignorieren Ihre Parameter (versuchen, lokal zu verbinden) – JimL

+0

Ich glaube nicht, da die Fehlermeldung Login-Parameter enthält und es aktualisiert wird, wie ich meine Parameter-Datei ändern. PDO -> __ Konstrukt ('mysql: dbname = mein ...', 'mysite', 'passwort') – loicb

+0

Ich fand diese Antwort, die darauf hindeutet, ein Leerzeichen zwischen 'mysql:' und 'host' zu setzen; http://StackOverflow.com/a/25432156/1811501 – thaJeztah

Antwort

0

Entfernen Sie den Datenbanktreiber und den zu verwendenden Port. Da Sie die Portweiterleitung nicht verwendet haben, müssen Sie den Port für MySQL nicht angeben. Außerdem gibt es einen Fehler in Ihrem Treiber, es ist nicht nur pdo, sondern pdo_mysql (documentation).

database_host: database 
database_name: mysite 
database_user: mysite 
database_password: password 

Auch warum geben Sie eine database_path? MySQL benötigt das nicht, weil Sie es per TCP/IP aufrufen. Alte SQLite-Datenbank?

Sie können auch Ihre config.yml Datei Kasse:

# Doctrine Configuration 
doctrine: 
    dbal: 
     driver: pdo_mysql 
     host:  "%database_host%" 
     port:  "%database_port%" 
     dbname: "%database_name%" 
     user:  "%database_user%" 
     password: "%database_password%" 
     charset: UTF8 
     # if using pdo_sqlite as your database driver: 
     # 1. add the path in parameters.yml 
     #  e.g. database_path: "%kernel.root_dir%/data/data.db3" 
     # 2. Uncomment database_path in parameters.yml.dist 
     # 3. Uncomment next line: 
     #  path:  "%database_path%" 

    orm: 
     auto_generate_proxy_classes: "%kernel.debug%" 
     naming_strategy: doctrine.orm.naming_strategy.underscore 
     auto_mapping: true 
+0

Ich habe hier einen Tippfehler in meinen Treiber eingefügt, aber meine aktuelle Parameterdatei ist in Ordnung. Ich habe versucht, Treiber und Port zu entfernen, aber immer noch die gleiche Nachricht. Ich werde ein neues Symfony-Projekt ausprobieren, wenn ich mehr Zeit habe. – loicb

Verwandte Themen