首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP连接被拒绝

PHP连接被拒绝
EN

Stack Overflow用户
提问于 2021-01-11 22:18:36
回答 1查看 118关注 0票数 0

我还看过其他几篇关于这个问题的帖子。其中一个特别的例子是:

Docker MYSQL '[2002] Connection refused'

我尝试按照上一个问题中的说明添加PMA_HOST: mysql。

下面是我的docker-compose.yml文件:

代码语言:javascript
运行
复制
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:

我的dockerfile:

代码语言:javascript
运行
复制
FROM php:7.0.30-apache
RUN docker-php-ext-install pdo pdo_mysql

使用上面的代码,当我尝试连接到数据库时,我得到了错误:

代码语言:javascript
运行
复制
Conneciton failed: SQLSTATE[HY000] [2002] Connection refused

如前所述,根据前面提出的问题,我更新了yml文件,将PMA_HOST: mysql包含在phpmyadmin服务的环境部分中。问题是,当我这样做时,我不能再登录到phpmyadmin。

有没有人看到我做错了什么,现在我可以改正了?

*编辑*

下面是我的数据库连接文件:

代码语言:javascript
运行
复制
<?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/>";
}
?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-11 22:52:16

目前,您正在尝试使用127.0.0.1,而不是将主机实际设置为您正在为db运行的docker容器的服务,要解决此问题,您应该将文件更改为如下所示:

docker-compose.yml

代码语言:javascript
运行
复制
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:

数据库连接文件:

代码语言:javascript
运行
复制
<?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/>";
}
?>

这将允许您使用该服务自动填充主机,然后它还定义了卷。但这应该会起作用,并修复连接拒绝,因为它现在将找到主机地址和值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65668537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档