Docker PHP应用程序容器-无法通过托管在容器外部的数据库连接到mysql容器

时间:2020-05-14 20:37:22

标签: php mysql docker

我在docker容器中有一个PHP应用程序,并在另一个容器中运行mysql,其数据库托管在该容器之外。使用卷建立该连接。 现在,现有数据库已定义用户。我希望将我的PHP应用程序容器连接到数据库容器,并使用数据库中定义的现有用户ID来运行该应用程序。 两个容器都已启动并正在运行,但是PHP代码无法连接到mysql。有人能帮助我吗。

Docker-compose.yml:

version: '3'
services:
     db:
        image: mysql:5.7
        volumes:
          - /var/lib/mysql:/var/lib/mysql
        restart: always
        environment:
          - MYSQL_ROOT_PASSWORD=root
        ports:
          - "3306:3306"
     qa_api_test:
        build:
          context: ./
        ports:
          - "80:80"
        depends_on:
          - db

Docker file:
   FROM php:7.2-apache-buster
   WORKDIR /var/www/sites/test
   COPY . /var/www/sites/test
   RUN apt-get update && \
      docker-php-ext-install mysqli && \
      apt-get clean && \
      apt-get install -y libmagickwand-dev --no-install-recommends && rm -rf 
      /var/lib/apt/lists/*
  RUN printf "\n" | pecl install imagick
  RUN docker-php-ext-enable imagick
  RUN a2enmod rewrite
  COPY 000-default.conf /etc/apache2/sites-available/000-default.conf

Error: From postman: 


警告:mysqli::__ construct():(HY000 / 2002): /var/www/sites/test/inc/test6.inc.php 在 30

警告:mysqli::set_charset():无法在 /var/www/sites/test/inc/test6.inc.php 中获取mysqli。 31

警告:mysqli::real_escape_string():无法在行上的 /var/www/sites/test/inc/test6.inc.php 中获取mysqli。 226

警告:mysqli::query():无法在行上的 /var/www/sites/test/inc/test6.inc.php 中获取mysqli。 54

警告:ExecFetchObj():无法在 57行上的 /var/www/sites/test/inc/test6.inc.php 中获取mysqli。 b>

警告:ExecFetchObj():无法在 57行上的 /var/www/sites/test/inc/test6.inc.php 中获取mysqli。 b>

PHP Code:
    function SqlDbConnect($baseName, $user, $passWord, $host, 
&$sqlError)
        { 
            global $CnxLst, $CnxDbLst;

                $key = $host."-".$baseName;
                if ((! isset($CnxLst[$key])) || (! $CnxLst[$key]))
                {
            $CnxLst[$key] = new mysqli($host, $user, $passWord, 
$baseName);
            $CnxLst[$key]->set_charset("utf8mb4");
                        if ($CnxLst[$key] === false)
                        {
                                $sqlError = "ERROR: Failed to connect 
to MySQL Server $host/$baseName [".mysqli_connect_errno().': 
'.mysqli_connect_error().']';
                                if (DBDEBUG) logDebug::log($sqlError); 
                                return false;
                        }
                        $CnxDbLst[$key] = '';
                }
                // logDebug::log("SqlDbConnect($baseName, $user, 
$passWord, $host) => CnxLst[$key] set");
                return $CnxLst[$key];

0 个答案:

没有答案