创建包含 php、node.js 和 php 的 mysqli 的 Dockerfile

Creating a Dockerfile that includes php, node.js, and php's mysqli

我正在尝试创建一个 Dockerfile,它定义了一个具有 php、node.js 和 socket.io 以及 mysql 互操作性的环境。

目前我有这个:

FROM php:7.2-cli

RUN apt-get update && apt-get install -y nodejs npm
WORKDIR /usr/src/app
COPY . /usr/src/app
RUN npm install
RUN npm install express
RUN npm install socket.io
EXPOSE 8080
CMD [ "node", "src/Server.js" ]

问题是,当调用使用 mysqli 的 php 函数时,出现此错误:

Fatal error: Uncaught Error: Class 'mysqli' not found in /usr/src/app/src/php/db_connect.php:21
Stack trace:
#0 /usr/src/app/src/php/websocketsAPI.php(11): include()
#1 {main}
  thrown in /usr/src/app/src/php/db_connect.php on line 21

我读到这是由于 MySQL 设置。 MySQL 未安装在此容器上,所以我想这可能就是原因。如果我没记错的话,安装 MySQL 并不是一个可以无人值守的过程,所以我不愿意使用普通的 apt-get 系统安装 MySQL。我还读到 mysqli 是一个 php 组件。我不需要在此容器上使用 MySQL,除非可能是为了解决当前的错误。解决此问题的最佳方法是什么?

我找到了答案。我需要将这一行添加到 Dockerfile:

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

这使得 Dockerfile 变成了这样:

FROM php:7.2-cli

RUN apt-get update && apt-get install -y nodejs npm
WORKDIR /usr/src/app
COPY . /usr/src/app
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
RUN npm install
RUN npm install express
RUN npm install socket.io
EXPOSE 8080
CMD [ "node", "src/Server.js" ]