使用 PHP 和 MySql 的 Docker - $servername 错误 [重复]

Posted

技术标签:

【中文标题】使用 PHP 和 MySql 的 Docker - $servername 错误 [重复]【英文标题】:Docker with PHP and MySql - $servername Error [duplicate] 【发布时间】:2018-04-09 06:26:57 【问题描述】:

我有一个用 phpmysql 开发的项目。

当我使用与 DB 的连接时,我将连接设置如下:

 // Define $username and $password
$username=$_POST['username'];
$password=$_POST['password'];


/* -------------------------------- CONNESSIONE -------------------------------------- */
$servername = "localhosto";
$username_db = "xxxxxx";
$password_db = "yyyyyy";
$db = "zzzzzz";

try 
    $conn = new PDO("mysql:host=$servername;dbname=$db", $username_db, $password_db);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    //echo "Connected successfully<br/><br/>";

catch(PDOException $e)

    echo "Connection failed: " . $e->getMessage()."<br/><br/>";

项目运行正常,连接MySql没有问题。

下一步我创建了一个带有以下 docker 文件的 Docker 映像:

FROM php:7.0-apache


RUN apt-get update \
  && apt-get install -y --no-install-recommends libpq-dev \
  && docker-php-ext-install mysqli pdo_pgsql pdo_mysql


COPY / /var/www/html
EXPOSE 80

我已经创建了图像和容器:

docker build -t mysoftware C:\Users\mysoftware
docker run -d -p 5000:80 mysoftware

但是 PHP 应用程序没有连接到 MySql。

我需要用服务器名称更改连接:

$servername = "SERVER_NAME";

如果应用在没有容器的情况下正确运行,为什么我会报错??

【问题讨论】:

【参考方案1】:

在容器内运行时,localhost 不会解析到宿主机,而是引用容器 IP 地址。

您需要从容器内连接到主机。对于该检查:From inside of a Docker container, how do I connect to the localhost of the machine?

【讨论】:

【参考方案2】:

(假设 *nix)一旦你运行了 mysql docker 容器......

docker ps

并找到正在运行的 mysql 容器的名称。然后去寻找IP地址...

docker inspect <name_of_container> | grep IPAddress

然后使用此 IP 地址连接服务器。

【讨论】:

以上是关于使用 PHP 和 MySql 的 Docker - $servername 错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 docker-compose、nginx、mysql 和 php 上运行 wordpress

在Docker下搭建Apache+PHP+mysql环境的过程记录

Docker nginx+php74+mysql57, 并安装gd和mysql扩展

为啥 PHP docker 容器无法查找 MYSQL 容器的主机名?

MySQL 函数在“php:7.1”docker 镜像中不可用

我需要一个可以使用 php 连接到外部 MYSQL 数据库的 docker 映像