在docker-compose中“无法连接到本地MySQL服务器”

时间:2016-07-08 19:14:04

标签: mysql laravel docker docker-compose

我有使用MySQL的Laravel应用程序,我正在尝试使用docker-compose在Docker中运行它。但是当app尝试连接数据库时,它会抛出:

  

Connector.php第55行中的PDOException:SQLSTATE [HY000] [2002]无法通过socket'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器(2)

我的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

我的.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

2 个答案:

答案 0 :(得分:3)

Mysql与" localhost"的连接;默认情况下,尝试通过本地计算机上的套接字进行连接。您的DB_HOST应该是链接的容器名称," db"。

来自MYSQL docs

  

在Unix上,MySQL程序特别对待主机名localhost,其方式可能与您期望的与其他基于网络的程序相比有所不同。对于与localhost的连接,MySQL程序尝试使用Unix套接字文件连接到本地服务器。即使给出--port或-P选项指定端口号,也会发生这种情况。要确保客户端与本地服务器建立TCP / IP连接,请使用--host或-h指定主机名值127.0.0.1,或本地服务器的IP地址或名称。您还可以使用--protocol = TCP选项显式指定连接协议,即使对于localhost也是如此。例如:

答案 1 :(得分:1)

您可以在.env中将DB_HOST localhost 更改为 ip 。 要接收 ip mysql docker container ,需要编写命令:

ob.generateBoard();