与PHP和MySql的Docker – $ servername错误

我有一个用PHP和MySql开发的项目。

当我使用连接到数据库我设置连接如下:

// 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没有问题。

下一步,我创build了一个Docker Image和一个跟随的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 

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

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

但Php应用程序不连接到MySql。

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

 $servername = "SERVER_NAME"; 

为什么我有一个错误,如果应用程序正常运行没有容器?

在容器内部运行时, localhost不会parsing到主机,而是参考容器的IP地址。

您需要从容器内连接到主机。 对于这个检查: 从Docker容器的内部,我如何连接到本机的本地主机?

(假设* nix)一旦你有MySQL的docker容器运行…

 docker ps 

并find正在运行的mysql容器的名称。 然后findIP地址…

 docker inspect <name_of_container> | grep IPAddress 

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