PHP连接被拒绝
Posted
技术标签:
【中文标题】PHP连接被拒绝【英文标题】:PHP Connection refused 【发布时间】:2021-04-16 11:52:27 【问题描述】:我已经看到其他几个关于这个问题的帖子。特别是这样的:
Docker mysql '[2002] Connection refused'
我尝试按照上一个问题的说明添加 PMA_HOST: mysql。
这是我的 docker-compose.yml 文件的样子:
version: "3.7"
services:
www:
build: .
ports:
- "8001:80"
volumes:
- ./www:/var/www/html/
links:
- db
networks:
- default
db:
image: mysql:8.0
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: myDb
MYSQL_USER: user
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: test
volumes:
- ./dump:/docker-entrypoint-initdb.d
networks:
- default
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- db:db
ports:
- 8000:80
environment:
MYSQL_USER: user
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: test
volumes:
persistent:
我的码头文件:
FROM php:7.0.30-apache
RUN docker-php-ext-install pdo pdo_mysql
使用上述方法,尝试连接数据库时,出现错误:
Conneciton failed: SQLSTATE[HY000] [2002] Connection refused
如前所述,根据之前提出的问题,我更新了 yml 文件以在 phpmyadmin 服务的环境部分下包含 PMA_HOST: mysql。问题是,当我这样做时,我无法再登录 phpmyadmin。
有人看到我做错了什么,现在我可以解决了吗?
*** 编辑 ***
这是我的数据库连接文件:
<?php
$host = '127.0.0.1';
$dbname = 'myDb';
define ('DB_USER', 'user');
define ('DB_PASSWORD', 'test');
try
$dbc = new PDO("mysql:dbname=$dbname;host=$host", DB_USER, DB_PASSWORD);
$dbc->SetAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
catch (PDOException $e)
echo "Connection failed: " . $e->getMessage() . "<br/>";
?>
【问题讨论】:
重启一次服务器@john @DarshanMalani - 不知道你的意思。我已经重建了 Docker 容器,但仍然遇到同样的问题。 同理你需要重新配置PHPMyAdmin指向数据库而不是本地主机,你还需要重新配置应用程序的$host
。
@DavidMaze - 我不确定你的意思。你能发布答案吗?
【参考方案1】:
目前,您正在尝试使用 127.0.0.1 而不是实际将主机设置为您为 db 运行的 docker 容器的服务,要解决此问题,您应该将文件更改为如下内容:
docker-compose.yml
version: "3.7"
services:
www:
build: .
ports:
- "8001:80"
volumes:
- www:/var/www/html/
db:
image: mysql:8.0 # also recommend using mariadb over the MySQL image.
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: myDb
MYSQL_USER: user
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: test
volumes:
- mysql-data:/docker-entrypoint-initdb.d
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- 8000:80
environment:
MYSQL_USER: user
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: test
volumes:
mysql-data:
phpmyadmin:
数据库连接文件:
<?php
$host = 'db';
$dbname = 'myDb';
define ('DB_USER', 'user');
define ('DB_PASSWORD', 'test');
try
$dbc = new PDO("mysql:dbname=$dbname;host=$host", DB_USER, DB_PASSWORD);
$dbc->SetAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
catch (PDOException $e)
echo "Connection failed: " . $e->getMessage() . "<br/>";
?>
这将允许您使用该服务来自动填充主机,然后它还定义了卷。但这应该可以解决连接拒绝问题,因为它现在会找到主机地址和值。
【讨论】:
在进行更新时,现在我收到以下错误:连接失败:SQLSTATE[HY000] [2054] 服务器请求客户端未知的身份验证方法 这是由于此引用 Stack Overflow(我建议 mariadb 的部分原因)该页面上还有更多内容也引用了相同的问题 这似乎奏效了。我不再收到任何前面所述的错误消息。我正在运行一些测试,但一切似乎都很好。谢谢。以上是关于PHP连接被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
在 XAMPP(MacOS)中使用 php 连接 MySQL 服务器被拒绝连接
PHP - SoapClient::SoapClient 无法打开流:连接被拒绝
“连接失败:用户'root'@'localhost'的访问被拒绝(使用密码:YES)”来自php函数[重复]
PHP + MYSQL + Laravel - “SQLSTATE [HY000] [2002] 连接被拒绝” [重复]