docker compose MySQL 容器 [2002] 连接被拒绝

Posted

技术标签:

【中文标题】docker compose MySQL 容器 [2002] 连接被拒绝【英文标题】:docker compose MySQL container [2002] Connection refused 【发布时间】:2018-10-23 19:31:21 【问题描述】:

我正在尝试为 nginx + php(Laravel) + mysql 构建 docker compose 容器,但我不断收到 Connection denied 错误

docker-compose.yml

version: "3"
services:

    nginx:
        image: nginx:latest
        ports:
            - '8080:80'
        volumes:
            - ./nginx:/etc/nginx/conf.d
            - ./logs/nginx:/var/logs/nginx
            - ./apps:/var/www/html
        depends_on:
            - php
        restart: always

    php:
        image: laradock/php-fpm:2.2-7.2
        volumes:
            - ./apps:/var/www/html
        restart: always
    mysql:
        image: mariadb
        ports:
            - '33060:3306'
        volumes:
            - ./db:/var/lib/mysql
        environment:
            - MYSQL_ROOT_PASSWORD=root
        restart: always

./apps 我有一个全新的 Laravel 应用程序,带有基本的 SQL 设置

所有容器都运行没有错误,我可以使用连接到 MySQL 容器

mysql -u 127.0.0.1 -P 33060 -u root -p

但是当我尝试从浏览器访问或直接 ssh 进入 php 容器时,我不断收到错误 2002。

我在服务器上运行了 nginx 和 mysql,所以我使用 8080 和 33060 端口,不知道是不是这个问题。

.env

DB_CONNECTION=mysql
DB_HOST=127.0.0
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=root
DB_PASSWORD=secret

感谢您的帮助。

【问题讨论】:

我怀疑你的 laravel 应用程序正试图通过端口 3306 访问 mysql,而它被 mysql 容器暴露为 33060。确保 php 应用程序配置为使用端口 33060 进行 mysql 连接。 【参考方案1】:

从this Github Issue得到想法

我的第一个猜测是试图找到 mysql unix 快死了 套接字文件,当它需要通过非本地主机连接时 联系。如果您使用 compose 文件来启动它们,那么您 可以连接到docker提供的dns名称(即链接: docker-mysql,将 dns 名称设置为 docker-mysql)。所以你必须 改变你的连接线:

- php -r "new PDO('mysql:host=localhost;port=3306;charset=utf8', 'root', '123123');"

+ php -r "new PDO('mysql:host=docker-mysql;port=3306;charset=utf8', 'root', '123123');"

通过将DB_HOST 更改为.env 文件中的docker 容器名称解决了这个问题

DB_HOST=docker_mysql_1

【讨论】:

我一直在寻找答案 2 小时,非常感谢 =)

以上是关于docker compose MySQL 容器 [2002] 连接被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

将 NodeJS Docker 容器连接到 MySQL Docker 容器 - docker-compose 3

docker compose MySQL 容器 [2002] 连接被拒绝

Docker-compose 多个Docker容器管理:以MYSQL和Wordpress为例

docker-compose构建cmdb联合容器项目

docker-compose内mysql 挂载数据库目录,启动时mysql容器自动退出

Docker-compose.yml for NodeJs with MySQL on AWS Elastic Beanstalk 单容器 Docker