首页 > 解决方案 > 无法使用 docker-compose 和 php-fpm 连接到 mysqli_connect()

问题描述

由于此错误,我无法从容器中显示我的 index.php:

Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /var/www/db/dbh.inc.php:8 Stack trace: #0 /var/www/includes/header.php(6): require() #1 /var/www/index.php(2): require_once('/var/www/includ...') #2 {main} thrown in /var/www/db/dbh.inc.php on line 8

第 8 行是:$conn = mysqli_connect($servername, $db_username, $db_password, $db_name);

我知道 mysql_connect 在 PHP 7.0 中已弃用,我在这里使用 mysqli_connect

我来自 php-fpm 的 Dockerfile 运行 mysqli 所以我不知道这里出了什么问题

如果我的 index.php 只显示Hello Worldererything 与 Docker 配合得很好。只是为了让您知道我的网站在没有 Docker 的情况下在我的本地主机上运行良好。

如果我想连接到我的数据库,它不适用于 Docker。

为了启动容器,我做docker-compose up -d

我有两个问题:

1.我该如何解决这个问题?

2.我怎样才能总是先启动 db 容器,然后再使用 docker-compose 启动所有其他容器?

这是我的树文件:

.
├── access
│ --- commented ---
├── assets
| --- commented ---
├── changepass.php
├── contact.php
├── db
│   ├── dbh.inc.php
│   ├── Dockerfile
│   └── mysqldump.all.tables.sql
├── docker
│   ├── docker-compose.yml
│   ├── nginx
│   │   ├── conf.d
│   │   │   └── default.conf
│   │   ├── Dockerfile
│   │   ├── nginx.conf
│   │   └── sites
│   │       └── default.conf
│   └── php-fpm
│       └── Dockerfile
├── editerrors.php
├── includes
│   ├── auth_check.php
│   ├── footer.php
│   ├── functions.inc.php
│   └── header.php
├── index.php
├── login.php
├── log.php
├── profile.php
├── signup.php
├── stb.php
└── userslist.php

/docker/nginx/Dockerfile

# nginx
FROM nginx:alpine

CMD ["nginx"]

EXPOSE 80 443

/docker/php-fpm/Dockerfile

# php-fpm

FROM php:fpm-alpine

RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli

CMD ["php-fpm"]

EXPOSE 9000

WORKDIR /var/www/

/db/Dockerfile

# Database MariaDB
FROM mariadb:latest

CMD ["mysqld"]

EXPOSE 3306

/docker/docker-compose.yml

version: '3'

services:
  php-fpm:
    container_name: php
    build:
      context: ./php-fpm
    volumes:
      - ../:/var/www

  nginx:
    container_name: nginx
    build:
      context: ./nginx
    volumes:
      - ../:/var/www
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/sites/:/etc/nginx/sites-available
      - ./nginx/conf.d/:/etc/nginx/conf.d
    depends_on:
      - php-fpm
    ports:
      - "9001:80"
      - "443:443"

  database:
    container_name: db
    build:
      context: .
      dockerfile: ../db/Dockerfile
    environment:
      - MYSQL_DATABASE=mydb
      - MYSQL_USER=myuser
      - MYSQL_PASSWORD=mypassword
      - MYSQL_ROOT_PASSWORD=docker
    volumes:
      - ../db/mysqldump.all.tables.sql:/docker-entrypoint-initdb.d/mysqldump.all.tables.sql

标签: phpdockerdocker-compose

解决方案


推荐阅读