使用 PHP 和 MySql 的 Docker - $servername 错误 [重复]
Posted
技术标签:
【中文标题】使用 PHP 和 MySql 的 Docker - $servername 错误 [重复]【英文标题】:Docker with PHP and MySql - $servername Error [duplicate] 【发布时间】:2018-04-09 06:26:57 【问题描述】:当我使用与 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 容器的主机名?