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

docker compose MySQL容器[2002]连接被拒绝,mysql,laravel,docker,Mysql,Laravel,Docker,我正在尝试为Nginx+PHP(Laravel)+MySQL构建docker compose容器,但我一直遇到连接被拒绝的错误 docker compose.yml version: "3" services: nginx: image: nginx:latest ports: - '8080:80' volumes: - ./nginx:/etc/nginx/conf.d

我正在尝试为Nginx+PHP(Laravel)+MySQL构建docker compose容器,但我一直遇到连接被拒绝的错误

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 -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
感谢您的帮助。

从您的

我的第一个猜测是,它正在努力寻找mysql unix 套接字文件,当它需要通过非本地主机连接时 连接。如果您正在使用compose文件启动它们,则 可以连接到docker提供的dns名称(即链接: docker mysql,将dns名称设置为docker mysql)。所以你必须 更改您的连接线:

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

+php-r“新PDO('mysql:host=dockermysql;port=3306;charset=utf8'、'root'、'123123');”

通过在
.env
文件中将
DB\u主机更改为docker容器名称,解决了这个问题

DB_HOST=docker_mysql_1

我怀疑您的laravel应用程序试图通过端口3306访问mysql,而mysql容器将其公开为33060。确保php应用程序已配置为使用端口33060进行mysql连接。我已经找了两个小时的答案,非常感谢=)