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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM