与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地址为服务器连接。