我在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];