Создание Dockerfile, который включает в себя mysqli php, node.js и php - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь создать Dockerfile, который определяет среду с php, node.js с express и 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" ]

Проблема в том, что при вызове функции php, использующей mysqli, я получаю эту ошибку:

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 не является процессом, который может происходить без присмотра, поэтому я неохотно устанавливал MySQL с использованием обычной системы apt-get. Я также читал, что mysqli является php компонентом. Мне не нужно MySQL в этом контейнере, кроме, возможно, чтобы решить эту текущую ошибку. Каков наилучший способ решить эту проблему?

1 Ответ

0 голосов
/ 15 марта 2020

Я нашел ответ. Мне нужно было добавить эту строку в 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" ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...