在Docker容器内静默安装pecl模块(例如pecl_http)



我正试图在docker容器中安装pecl_http。目前我的Dockerfile看起来像这样:

FROM fun:5000/apache-php:0.1.0
# Install dependencies
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && 
    apt-get -y install 
        php5-dev 
        libcurl4-openssl-dev && 
    yes "n" | pecl install pecl_http-1.7.6 && 
    echo "extension=http.so" > /etc/php5/mods-available/http.ini && 
    cd /etc/php5/apache2/conf.d/ && 
    ln -s ../../mods-available/http.ini 20-http.ini && 
    ...

最初,我只是在docker文件中使用pecl install pecl_http-1.7.6,容器就成功构建了——没有安装pecl_http。

如果我连接到容器,我可以通过交互式pecl install pecl_http-1.7.6安装pecl_http,只需在每次提示后点击回车键。我刚刚了解了yes,它似乎符合我的需求。在线搜索表明,许多人使用它来执行无人值守的pecl安装,包括pecl_http;但是,当我尝试在docker容器中使用它时,它会以configure: error: could not find magic.h失败。

如何在Docker中执行静默pecl_http安装?

您的pecl install正在问您这个问题:

是否启用响应内容类型猜测;指定libmagic目录[no]:

yes "n"并没有做你认为的事情——它实际上在输出:

n
n
n
n
n
n

因此,因为你在回答上面的问题时说n,安装程序认为你在告诉它在n中查找libmagic,当然它失败了,因为n是胡说八道。

yes在您告诉它输出的每个命令之后都有一个隐式返回,所以如果您只想让它返回并使用默认值,请使用yes ''

工作Dockerfile:

FROM ubuntu:14.04
# Install dependencies
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update
RUN apt-get -y install php5-dev
RUN apt-get -y install libcurl4-openssl-dev
RUN apt-get -y install libevent-dev
RUN echo "extension=http.so" > /etc/php5/mods-available/http.ini
RUN yes "" | pecl install pecl_http-1.7.6
RUN cd /etc/php5/apache2/conf.d/
RUN ln -s ../../mods-available/http.ini 20-http.ini
...

额外提示:不要害怕将命令拆分为单独的RUN语句,以充分利用docker缓存。

最新更新