当前位置: 首页 > 知识库问答 >
问题:

PHP容器无法连接到MySQL容器

公孙巴英
2023-03-14

我正试图从PHP容器连接到容器化的MySQL数据库,虽然同一网络上的所有容器都是如此,但问题是,当我点击http://localhost:8080/dbTest.php尽管我已经使用mysql-u root-p检查了凭证是否正确,并且演示数据库是否存在

我在mysql log mbind中看到这条消息:不允许的操作可能相关?
谢谢

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--名称apache--网络后端-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--network backend-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--名称mysql--网络后端--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

共有3个答案

赵经国
2023-03-14

我忘记添加$-

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

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

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


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

邓阳炎
2023-03-14
匿名用户

您是否在mySql中启用了远程访问?

nano/etc/mysql/mysql.conf.d/mysqld.cnf

绑定地址=127.0.0.1替换为绑定地址=0.0.0.0

谈旺
2023-03-14

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

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

参考

 类似资料:
  • 我已经创建了一个MySQL数据库的映像,并在容器中运行它。我希望它在端口3406/3407上运行,因此我调用docker run命令如下所示: 如果我看我的容器,它看起来是这样的: 我非常想连接到我的数据库现在,但我似乎不能使我的URL工作。 这是我的URL的样子:

  • 问题内容: 我有用于创建mysql映像的docker- compose文件,并将端口公开给3306,但是当我尝试安装CMS时,出现了无法连接数据库的错误。我尝试扫描端口3306,并向我显示它已打开,因此mysql正在运行。 为什么两个Docker容器彼此看不到? 这是我的docker-compose文件: 问题答案: 要连接到数据库,请使用您作为主机名提供的链接/别名。因此,您的CMS可以使用主机

  • 我有zipkin服务器作为Spring Boot应用程序运行。我已经将jar导出到docker容器。 我已经探索过这个环节。

  • 问题内容: 计划 我希望我的tomcat服务器能够在单独的容器中连接到我的MySQL服务器。 问题 Tomcat无法连接到MySQL 我使用了wordpress教程中的一些详细信息,这些信息涉及与mysql容器建立链接并创建指向MySQL的链接。 尽管tomcat和mysql旋转得很好,但我似乎无法使tomcat能够连接到MySQL,但是这些设置在我的本地计算机上也可以正常运行。 我也尝试使用它,

  • 我已经使用docker工具箱在视窗机器上安装了docker。我也在我的视窗机器上安装了mysql,服务器运行在端口3306上(localhost-127.0.0.1-在docker机器之外)。我在一个名为“micra-workq-svc”的docker网络内部的docker容器中运行一个冲刺启动应用程序,我希望在docker内部运行的应用程序连接到本地主机。我花了几个小时在谷歌上搜索,没有一个链接

  • 并运行相同的命令,它可以工作。 我如何才能从容器外部登录到MySQL服务器而不会得到任何错误?