Docker PHP5.6 调用未定义函数 bindtextdomain()

Docker PHP5.6 Call to undefined function bindtextdomain()

问题:

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

Fatal error: Call to undefined function bindtextdomain() in /usr/share/nginx/html/some_project/some_path/Bootstrap.php on line 16

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

我的配置:

在我的 Docker 文件中,我尝试安装它:

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 Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-20131226/gettext.so' - /usr/local/lib/php/extensions/no-debug-non-zts-20131226/gettext.so: cannot open shared object file: No such file or directory in Unknown on line 0

在我看来是什么:

我觉得

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

不安装 php-gettext 扩展。我不知道为什么。我认为这是一个 PHP Docker 化的具体问题。

于是,经过一番努力,我终于找到了如何在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 扩展的特定方法:

How to install more PHP extensions

We provide the helper scripts docker-php-ext-configure, docker-php-ext-install, and docker-php-ext-enable to more easily install PHP extensions.

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