问题描述
我有带有 MySQL 的 Laravel 应用程序,我正在尝试使用 docker-compose 在 Docker 中运行它.但是当应用程序尝试连接数据库时,它会抛出:
I have Laravel application with MySQL and I'm trying to run it in Docker using docker-compose. But when app trying to connect DB, it throws:
PDOException in Connector.php line 55: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
PDOException in Connector.php line 55: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
我的 docker-compose.yml:
My docker-compose.yml:
我的 .env:
推荐答案
默认情况下,Mysql 连接到localhost"会尝试通过本地计算机上的套接字进行连接.您的 DB_HOST 应该是链接的容器名称,db".
Mysql connections to "localhost" by default attempt to connect over a socket present on the local machine. Your DB_HOST should be the linked container name, "db".
来自 MYSQL 文档:
在 Unix 上,MySQL 程序特别对待主机名 localhost,与其他基于网络的程序相比,其方式可能与您期望的不同.对于到本地主机的连接,MySQL 程序尝试使用 Unix 套接字文件连接到本地服务器.即使提供了 --port 或 -P 选项来指定端口号,也会发生这种情况.要确保客户端与本地服务器建立 TCP/IP 连接,请使用 --host 或 -h 指定主机名值 127.0.0.1,或本地服务器的 IP 地址或名称.您还可以使用 --protocol=TCP 选项显式指定连接协议,即使对于本地主机也是如此.例如:
On Unix, MySQL programs treat the host name localhost specially, in a way that is likely different from what you expect compared to other network-based programs. For connections to localhost, MySQL programs attempt to connect to the local server by using a Unix socket file. This occurs even if a --port or -P option is given to specify a port number. To ensure that the client makes a TCP/IP connection to the local server, use --host or -h to specify a host name value of 127.0.0.1, or the IP address or name of the local server. You can also specify the connection protocol explicitly, even for localhost, by using the --protocol=TCP option. For example:
这篇关于“无法连接到本地 MySQL 服务器"在 docker-compose 中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!