2

问题:

我有一个带有 nginx 服务和 PHP 服务的 Docker 组合。当我尝试打开我的开发项目的页面时,我遇到了这个错误:

致命错误:在第 16 行的 /usr/share/nginx/html/some_project/some_path/Bootstrap.php 中调用未定义的函数 bindtextdomain()

我看到这是缺少依赖项的问题:php-gettext.

我的配置:

在我的 Dockerfile 中,我尝试安装它:

FROM php:5.6.30-fpm
MAINTAINER DarckCrystale "xxx@xxx.xx"

# Here I try to install the php-gettext extension
# but it does not work
RUN apt-get update && apt-get install -y php-gettext gettext

# Setup PHP configuration
ADD php.ini /usr/local/etc/php/conf.d/php.ini

在我的 php.ini 中,我加载它:

extension=gettext.so

其他信息:

当我在我的容器中运行时

php -i | grep extension_dir

我显示了这条消息:

PHP 警告:PHP 启动:无法加载动态库 '/usr/local/lib/php/extensions/no-debug-non-zts-20131226/gettext.so' - /usr/local/lib/php/extensions/no -debug-non-zts-20131226/gettext.so:无法打开共享对象文件:第 0 行的 Unknown 中没有此类文件或目录

在我看来是什么:

我认为

RUN apt-get update && apt-get install -y php-gettext gettext

不安装php-gettext扩展。我不知道为什么。我认为这是一个 PHP Dockerized 的特定问题。

4

1 回答 1

4

于是,经过一番努力,我终于找到了如何在 PHP 容器中安装这个扩展!

如何解决这个问题呢?

在 Dockerfile 中使用docker-php-ext-install而不是:apt-get install

FROM php:5.6.30-fpm
MAINTAINER DarckCrystale "xxx@xxx.xx"

# Here I install the php-gettext extension
# and it works! :D
RUN docker-php-ext-install gettext

# Setup PHP configuration
ADD php.ini /usr/local/etc/php/conf.d/php.ini

问题是什么?

PHP 容器有一种特定的方式来安装 PHP 扩展:

如何安装更多 PHP 扩展

我们提供了帮助脚本docker-php-ext-configuredocker-php-ext-install和 ,docker-php-ext-enable以便更轻松地安装 PHP 扩展。

所以php-gettext扩展安装似乎只能使用提供的脚本。

于 2017-04-11T08:58:19.130 回答