Docker & Laravel: configure: error: требования к пакету (oniguruma) не были выполнены

12

Может ли кто-нибудь помочь мне с этой проблемой.

Когда я пытаюсь создать образ Docker из файла Docker для приложения Laravel, я получаю эту ошибку:

проверка на oniguruma ... нет конфигурации: ошибка: требования пакета (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 .
Эми Мерфи
источник

Ответы:

22

Просто удалите mbstringиз docker-php-ext-installинструкции.

Ошибка вызвана проблемой зависимости - mbstringрасширение требует, чтобы onigurumaбиблиотека работала с многобайтовыми функциями регулярных выражений. Из руководства по установке :

Онигурума необходим для функций регулярных выражений с поддержкой многобайтовых символов. Онигурума в комплекте с mbstring. Начиная с PHP 5.4.0, если Oniguruma уже установлена ​​в системе, можно указать --with-onig [= DIR] для использования установленной библиотеки.

Однако в образе, который вы используете, расширение уже установлено и настроено, поэтому вам больше ничего не нужно делать:

$> 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)
kalatabe
источник
Спасибо @kalatabe
Эми Мерфи
16

То, что сказал @kalatabe, правильно. Но в случае , если вы абсолютно хотели убедиться , что MBstring получает установлена, вы можете также добавить libonig-devв свойapt-get install

KGX
источник