我有使用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
答案 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();