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

Posted

技术标签:

【中文标题】docker-compose 中的“无法连接到本地 MySQL 服务器”【英文标题】:"Can't connect to local MySQL server" in docker-compose 【发布时间】:2016-11-11 10:45:14 【问题描述】:

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

Connector.php 第 55 行中的 PDOException: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (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

【问题讨论】:

【参考方案1】:

默认情况下,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 也是如此。例如:

【讨论】:

如何以及在何处将 DB_HOST 链接到 db 我有同样的问题,除了我已经知道我必须使用我的容器名称,我仍然没有连接;奇怪的是昨天我做了,有人知道会发生什么吗?...【参考方案2】:

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

docker exec -it <CONTAINER_ID> ip add show eth0

【讨论】:

你会在 DB_HOST 中使用输出的哪一部分?

以上是关于docker-compose 中的“无法连接到本地 MySQL 服务器”的主要内容,如果未能解决你的问题,请参考以下文章

Intellij 无法连接到本地 m2 存储库

R中的H2O错误-无法连接到本地主机

EasyPHP 无法连接到本地主机(端口 8080)

MySQL Workbench 连接到 AWS,收到错误“无法连接到本地主机”

无法连接到本地mysql

windows 2008 R2 出现身份验证错误。 无法连接到本地安全机构