【问题标题】:mysqli_connect not defined in Dockermysqli_connect 未在 Docker 中定义
【发布时间】:2021-10-27 19:22:15
【问题描述】:

我是 Docker 新手,正在尝试使用 PHP 和 MySQL(特别是 mysqli)创建映像。

当我启动我的应用程序并且 PHP 代码尝试从数据库中提取时,出现此错误:

Uncaught Error: Call to undefined function mysqli_connect() 

这是我的 Dockerfile:

FROM php:7.4-apache
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli

这是我的 docker-compose.yml 文件:

version: "3.6"

services:
  php:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./public_html:/var/www/html
    ports:
      - 8080:80

  db:
    image: mysql:5.7.34
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: mydb
      MYSQL_USER: user
      MYSQL_PASSWORD: user
    volumes:
      - ./init:/docker-entrypoint-initdb.d

  adminer:
    image: adminer
    restart: always
    ports:
      - 8081:8080

当我查看phpinfo() 时,mysqlnd 有一个部分,但mysqli 没有一个部分。

Mysql 正常工作,就像adminer 工作一样——只是mysqli 不工作。

我错过了什么?谢谢。

【问题讨论】:

  • 用你的 dockerfile,无法重现。
  • @atline 它对你有用吗?呃,我认为 docker 应该解决这些烦恼。我重新启动计算机,从 Docker UI 中删除了映像,然后重新创建了映像 (docker build -t test-app .),然后创建了容器 (docker-compose up),但仍然没有运气。
  • 这些命令对吗?我从 UI 中删除了图像,将 docker 文件更改为使用 PHP 8,然后按照上述说明再次创建了图像和容器。在我的应用程序中,当我运行phpinfo() 时,它仍然显示 PHP 版本 7.4...为什么不显示版本 8?有缓存之类的吗?

标签: php mysql docker mysqli docker-compose


【解决方案1】:

我认为它没有像我预期的那样创建新图像。我想通了,因为我:

  • 从 Docker UI 中删除了容器(从“容器/应用程序”选项卡中)
  • Dockerfile 中将 PHP 的版本从 7.4 更改为 8.0
  • 从命令行重新创建了图像 (docker build -t test-app .)
  • 启动容器 (docker-compose up)
  • localhost:8080/index.php 打开我的应用程序,它正在运行phpinfo();
  • 它仍然显示 PHP 版本 7.4,而不是预期的 8.0

所以这表明最新的Dockerfile(PHP 8.0 的那个)没有被使用。由于我在初次运行后将&& docker-php-ext-enable mysqli 添加到Dockerfile,因此也没有使用。这就是为什么它适用于 @atline 首次运行。

我通过在 Docker UI 中执行以下操作使其工作:

  • 在“容器/应用程序”选项卡上停止和删除所有容器
  • 在“图片”选项卡上删除所有图片(不应留下“正在使用”的图片)
  • 在“卷”选项卡上删除所有卷

我很可能不了解图像/容器/应用程序之间的区别,所以我可能使用了上面的错误术语。

【讨论】:

  • 请记住,docker-compose 是一个独立于 docker 的东西,它并不关心您在具有 build 声明的服务上下文中使用 docker build 构建的图像。使用docker-compose builddocker-compose up --build 重建服务镜像。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 2019-09-24
相关资源
最近更新 更多