Docker & Laravel: 配置: 错误: 未满足包要求(oniguruma)

有人能帮我解决这个问题吗。

当我尝试从一个 dockerfile 为 laravel 应用程序创建一个 docker 映像时,我得到了这个错误:

看看有没有鬼魂... 没有 配置: 错误: 未满足包需求(oniguruma) :

No package 'oniguruma' found


Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.


Alternatively, you may set the environment variables ONIG_CFLAGS
and ONIG_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

命令“/bin/sh-c docker-php-ext-install pdo mbstring”返回非零代码: 1

这是我的 Dockerfile:

FROM php:7
RUN apt-get update -y && apt-get install -y openssl zip unzip git
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN docker-php-ext-install pdo mbstring
WORKDIR /app
COPY app /app # this copies all the app files to a folder called `app`
RUN composer install


CMD php artisan serve --host=0.0.0.0 --port=8000
EXPOSE 8000

和 docker 命令来构建 Dockerfile

sudo docker build -t test .
65784 次浏览

Just remove mbstring from the docker-php-ext-install instruction.

The error is caused by a dependency problem - the mbstring extension requires the oniguruma library to make multibyte regular expression functions work. From the installation guide:

Oniguruma is necessary for the regular expression functions with multibyte character support. Oniguruma is bundled with mbstring. As of PHP 5.4.0, if Oniguruma is already installed on the system, --with-onig[=DIR] can be specified to use the installed library.

However, in the image that you're using, the extension is already installed and configured, so you don't need to do anything else:

$> docker run --rm -it php:7 php -r "var_dump(mb_ereg_match('^99.*', '123456'));"
bool(false)


$> docker run --rm -it php:7 php -r "var_dump(mb_ereg_match('^12.*', '123456'));"
bool(true)

What @kalatabe said is correct. But in case you absolutely wanted to make sure mbstring gets installed, you can also add libonig-dev to your apt-get install

for phpbrew user

You can solve this error by removing the mbstring variant from the installation command using -mbstring parameter.

Example:

phpbrew install php-7.4 +default -mbstring

If your are using a distro with yum package manager. Execute this command:

sudo yum install -y oniguruma-devel

For ALPINE-based images e.g. FROM php:8.0.24-fpm-alpine3.16 you have to add the package oniguruma-dev like:

FROM php:8.0.24-fpm-alpine3.16
...
RUN apk update && apk add oniguruma-dev
...
RUN docker-php-ext-install -j$(nproc) mbstring
...

As @katalabe & @kgx already mentioned: mbstring requires any kind of oniguruma installed.

For Debian-based images please see @kgx answer above: https://stackoverflow.com/a/59373581/6852290