PHP 容器无法连接到 MySQL 容器

标签 php mysql apache docker dockerfile

我正在尝试从 PHP 容器连接到容器化的 MySQL DB,尽管所有容器都在同一网络上,但问题是我不断收到 Connection failed: invalid data source name当我点击 http://localhost:8080/dbTest.php尽管我已使用 mysql -u root -p 检查凭据是否正确并且 demo 数据库存在

我在 mysql 日志中看到这条消息 mbind: Operation not permitted 可能是相关的?
谢谢

Apache Dockerfile

FROM httpd:latest
RUN apt-get update
RUN apt-get upgrade
COPY demo.apache.conf /usr/local/apache2/conf/demo.apache.conf
RUN echo "Include /usr/local/apache2/conf/demo.apache.conf"  >> /usr/local/apache2/conf/httpd.conf

cmd:docker run -p 8080:80/tcp -v/home/hmalabeh/tutorial/docker/lamp/files/:/usr/local/apache2/htdocs/- -link=php --name apache --network backend -i 8f704f51962d


PHP Dockerfile

FROM php:7.2.7-fpm-alpine3.7
RUN docker-php-ext-install mysqli
RUN docker-php-ext-enable mysqli
RUN docker-php-ext-install pdo pdo_mysql
EXPOSE 9000

cmd:docker run -p 9000:9000 -v/home/hmalabeh/tutorial/docker/lamp/files/:/var/www/html/--name php - -网络后端-i 1cc049496b03


MySQL Dockerfile

FROM mysql:latest
RUN apt-get update
RUN apt-get upgrade
ENV MYSQL_ROOT_PASSWORD=root

cmd: docker run -p 3306:3306 -p 33060:33060 --name mysql --network backend --link=php -i 7bb7d4985301


dbTest.php

<?php
class DBConnect
{
    private $dsn = "mysql:dbname=demo;host=127.0.0.1;port=3306;";
    private $dbUsername = "root";
    private $dbPassword = "root";
    private $conn;

    public function connect()
    {
        try {
            echo 'Attempt Connection.     ';
            $this->conn = new PDO($dsn, $dbUsername, $dbPassword);

            echo 'Connected successfully.      ';
        } catch (PDOException $exception) {
            echo 'Connection failed: ' . $exception->getMessage();
        }
        return $this->conn;
    }
}


$co = new DBConnect();
$co->connect();
?>

我正在运行的容器

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                              NAMES
9639160c0824        8f704f51962d        "httpd-foreground"       2 hours ago         Up 2 hours          0.0.0.0:8080->80/tcp                               apache
38e630a9cb01        7bb7d4985301        "docker-entrypoint.s…"   2 hours ago         Up 2 hours          0.0.0.0:3306->3306/tcp, 0.0.0.0:33060->33060/tcp   mysql
c7f6e8db26a9        1cc049496b03        "docker-php-entrypoi…"   2 hours ago         Up 2 hours          0.0.0.0:9000->9000/tcp                             php

最佳答案

使用容器的名称将 host 添加到 DSN,因为它们在同一网络中:

private $dsn = "mysql:host=mysql;dbname=demo;port=3306;";

Reference

关于PHP 容器无法连接到 MySQL 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58012687/

相关文章:

apache - 从服务器请求文件多少次?

php - 相对路径不适用于 css 中的图像

PHP - 比较两个 mongodate

PHP - 搜索特定文件的目录和子目录?

Mysql使计数值加1

javascript - 为什么我从 Loopback4 收到“访问被拒绝”错误,同时能够使用相同的凭据从 MySql 工作台进行连接

php - 在电子邮件正文中使用 youtube 发送 iframe

具有特定过滤功能的 PHP 搜索表单

mysql - 在 `brew install mysql` 之后 mysqld 无法启动,提示未知选项 "--skip-locking"。我该如何解决?

apache - 如何拒绝对我的服务器公共(public) IP 地址的 https 请求