我正在尝试在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 && \ ...
最初,我只是pecl install pecl_http-1.7.6
在docker文件中使用,并且容器已成功构建-没有安装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
在您告诉它输出的每个命令之后都有一个隐式返回,因此,如果您只想让它命中return并使用默认值,请使用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缓存。