“无法连接到本地MySQL服务器"在docker-compose中 [英] "Can't connect to local MySQL server" in docker-compose

查看:140
本文介绍了“无法连接到本地MySQL服务器"在docker-compose中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有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:

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

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:

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

推荐答案

默认情况下,与"localhost"的Mysql连接会尝试通过本地计算机上存在的套接字进行连接.您的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中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆