我正试图在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缓存。