[英]Symfony 5 + Docker: SQLSTATE[HY000] [2002] Connection refused
[英]Getting php error related to MySQL server in docker: SQLSTATE[HY000] [2002] Connection refused
當我嘗試將 php 連接到具有 mysql 服務器的容器時,出現此錯誤
NOTICE: PHP message: PHP Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] Connection refused in /app/public/src/ConexaoBD.php:5
Stack trace:
#0 /app/public/src/ConexaoBD.php(5): PDO->__construct()
#1 /app/public/src/ProdutoDAO.php(8): ConexaoBD::getConexao()
#2 /app/public/home.php(15): ProdutoDAO->consultarProdutos()
#3 {main}
thrown in /app/public/src/ConexaoBD.php on line 5
172.19.0.8 - 26/Dec/2022:14:02:05 +0000 "GET /home.php" 500
這是 docker 撰寫文件:
version: '3.1'
services:
memcached:
image: 'memcached:alpine'
mailhog:
image: 'mailhog/mailhog:latest'
ports:
- '8001:8025'
redis:
image: 'redis:alpine'
mysql:
image: 'mysql:8.0'
working_dir: /app
volumes:
- ./init:/docker-entrypoint-initdb.d
environment:
- MYSQL_ROOT_PASSWORD=1234
- MYSQL_PASSWORD=1234
ports:
- '8002:3306'
clickhouse:
image: 'yandex/clickhouse-server:latest'
webserver:
image: 'nginx:alpine'
working_dir: /app
volumes:
- '.:/app'
- './phpdocker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf'
ports:
- '8000:80'
php-fpm:
build: phpdocker/php-fpm
working_dir: /app
volumes:
- '.:/app'
- './phpdocker/php-fpm/php-ini-overrides.ini:/etc/php/8.2/fpm/conf.d/99-overrides.ini'
這是連接 class:
class ConexaoBD{
public static function getConexao():PDO{
$conexao = new PDO("mysql:host=127.0.0.1;port=8002;dbname=lisbuy","root","1234",
array(PDO::ATTR_PERSISTENT => true));
return $conexao;
}
}
現在我將主機更改為 127.0.0.1,連接被拒絕。 而且 MySQL 服務器不可能沒有運行,因為我可以使用 php-server 連接到它,但是 nginx 網絡服務器無法連接
為了解決這個問題,我檢查了我項目的.network
docker network ls
結果是:
網絡 ID 名稱驅動程序 SCOPE
2d29fdfc097d 橋橋本地
daacebb20248 getting-started_default 網橋本地
417454d96fb2 主機主機本地
86e9b81f44b9 無 null 本地
57081b8817bf projeto-ecommerce_default 橋本地
然后我跑:
docker network inspect 57081b8817bf
得到這個:
"98e3771dbbf9070f18da96614e586faeed0274d9933c093c2e45984de005f930": {
"Name": "projeto-ecommerce-mysql-1",
"EndpointID": "f6003fd274f8701e96b6f4e8bfc552eb5f6fdb22c2976980519705f9736c1d0d",
"MacAddress": "02:42:ac:13:00:05",
"IPv4Address": "172.19.0.5/16",
"IPv6Address": ""
然后,在連接 class 中,我將容器的“名稱”添加到主機連接變量中:
public static function getConexao():PDO{
$conexao = new PDO("mysql:host=projeto-ecommerce-mysql-1;dbname=lisbuy","root","1234");
return $conexao;
}
並且工作了!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.