php - 无法使用 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 World
ererything 与 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
解决方案
推荐阅读
- azure - 使用 terraform 在 azure windows vm 中运行 DSC
- flutter - Flutter timer.periodic - 秒 x 毫秒
- jquery - 覆盖子对象中的 Jquery 方法
- dbt - 您如何跟踪 dbt 创建的所有表和视图?
- javascript - 通过 JavaScriot 中的特定键值对数组中的项目进行分组
- javascript - 指令没有正确等待NodeJS
- reactjs - OnClick 触发另一个按钮单击事件
- wordpress - 使用 Axios 发表评论时不存在“Access-Control-Allow-Origin”标头
- python - Python - 图像层数组 - Pillow 库
- vue.js - 如果在 Vue 3 中加载动态变化的图像,则更改 CSS