2016-07-08 8 views
2

Ich habe Laravel-Anwendung mit MySQL und ich versuche, es in Docker mit Docker-Compose ausführen. Aber wenn App DB zu verbinden versuchen, es wirft:"Ich kann keine Verbindung zum lokalen MySQL-Server herstellen" in docker-compose

PDOException in connector.php Linie 55: SQLSTATE [HY000] [2002] Kann nicht an lokalen MySQL-Server über Socket-Verbindung ‚/ var/run/mysqld/mysqld.sock‘(2)

Mein docker-compose.yml:

load_balancer: 
image: tutum/haproxy 
links: 
    - web 
ports: 
    - "80:80" 

cache: 
    image: redis 

db: 
    image: mysql 
    environment: 
     MYSQL_ROOT_PASSWORD: Q1w2e3r4t5 
     MYSQL_DATABASE: regappbase 

web: 
    image: andrewmclagan/nginx-hhvm 
    links: 
     - db 
     - cache 
    volumes: 
     - ./:/var/www 
    environment: 
     - APP_ENV=local 
     - DB_DATABASE=regappbase 
     - DB_PASSWORD=Q1w2e3r4t5 
     - VIRTUAL_HOST=laravel.local 

Mein .env:

APP_ENV=production 
APP_DEBUG=true 
APP_KEY=SomeRandomString 
APP_URL=http://laravel.local 

DB_CONNECTION=mysql 
DB_HOST=localhost 
DB_PORT=3306 
DB_DATABASE=regappbase 
DB_USERNAME=root 
DB_PASSWORD=Q1w2e3r4t5 

CACHE_DRIVER=file 
SESSION_DRIVER=file 
QUEUE_DRIVER=sync 

REDIS_HOST=laravel.local 
REDIS_PASSWORD=null 
REDIS_PORT=6379 

MAIL_DRIVER=smtp 
MAIL_HOST=mailtrap.io 
MAIL_PORT=2525 

Antwort

1

Mysql-Verbindungen zu "localhost" versuchen standardmäßig, eine Verbindung über einen Socket herzustellen, der auf dem lokalen Computer vorhanden ist. Ihr DB_HOST sollte der verknüpfte Containername "Db" sein.

Vom MYSQL docs:

Auf Unix-MySQL-Programme behandeln den Hostnamen localhost speziell, in einer Weise, die von wahrscheinlich anders ist, was erwarten Sie im Vergleich zu anderen Netzwerk-basierte Programme. Bei Verbindungen mit localhost versuchen MySQL-Programme, eine Verbindung zum lokalen Server herzustellen, indem sie eine Unix-Socket-Datei verwenden. Dies geschieht auch dann, wenn eine Option --port oder -P angegeben wird, um eine Portnummer anzugeben. Um sicherzustellen, dass der Client eine TCP/IP-Verbindung zum lokalen Server herstellt, verwenden Sie --host oder -h, um einen Hostnamen von 127.0.0.1 oder die IP-Adresse oder den Namen des lokalen Servers anzugeben. Sie können das Verbindungsprotokoll auch für localhost explizit angeben, indem Sie die Option --protocol = TCP verwenden. Zum Beispiel:

+0

Es funktioniert für mich! Vielen Dank! – Olga

+1

Wie und wo verbinden Sie DB_HOST mit 'db'? –

0

können Sie DB_HOST localhost ändern-ip in .env. ip mysql Docker Container zu erhalten braucht Befehl schreiben:

docker exec -it <CONTAINER_ID> ip add show eth0 
+0

Welchen Teil der Ausgabe würden Sie in DB_HOST verwenden? – MikeiLL