zoukankan      html  css  js  c++  java
  • SQLSTATE[HY000] [2002] Connection refused报错 PHP连接docker容器中的mysql

    Laradock 是基于 Docker 提供的完整 PHP 本地开发环境

    在框架中连接 MySQL 时 报错

    SQLSTATE[HY000] [2002] Connection refused
    

    主要还是是对 Docker 容器的隔离机制理解不够,每个容器之间都是隔离的,如果有相互依赖的服务,则需要进行显示的关联,比如使用选项--link
    同理,使用docker-compose时候,容器之间进行关联是采用类似如下的方式:

    # docker-compose.xml 缩减版
    version: '2'
    services:
    	
    	...
    	
        php:
            build: ./php
            
            ...
            
            links:
                - "mysql"
               
        mysql:
            build: ./mysql
            ports:
                - "3306:3306"
            environment:
                MYSQL_PASSWORD: root
    

    注意,关键地方来了:测试连接 MySQL 的代码其实是运行在 PHP 对应的容器里,而 MySQL 服务是在它自己对应的容器里,当我们的 host 填写 127.0.0.1 时候,其实对应的是 PHP 容器里面,所以不可能找到对应的服务,从而引起上面拒绝连接的错误。

    那么,怎么进行连接呢?

    其实容器之间关联之后,可以通过容器名进行连接。

    在上面的 docker-compose.xml 文件中,MySQL 服务对应的容器名是 mysql,PHP 容器与它关联的名字也是 mysql ,所以把 127.0.0.1 改成 mysql 再进行连接即可。

    # thinkphp项目 修改database.php文件
    'hostname'        => 'mysql',
    
    # Laravel 项目修改 .env 文件
    DB_HOST=mysql
    
  • 相关阅读:
    宫立秋20201015-3 每周例行报告
    宫立秋 20201008-1 每周例行报告
    分析“中国铁路12306”查询某个火车经过的车站和预计到达时间的request请求和respond响应。
    来自童晶老师的游戏开发课程作业
    飞机大战
    总结
    20201207-总结
    实时时钟
    作业要求 20201126-1 每周例行报告
    要求 20201120-1 每周例行报告
  • 原文地址:https://www.cnblogs.com/niuben/p/13583735.html
Copyright © 2011-2022 走看看