沉默地安装pecl模块(例如pecl_http)在Docker容器内部?
我正在尝试在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
文件中使用pecl install pecl_http-1.7.6
,并且成功构build了容器 – 没有安装pecl_http。
如果我附加到容器,我可以安装pecl_http与交互pecl install pecl_http-1.7.6
只需按每个提示后input。 我刚刚了解到,这似乎符合我的需求。 在线search表明,很多人用它来执行无人值守的pecl安装,包括pecl_http; 但是,当我试图在我的docker容器中使用它时,它与configure: error: could not find magic.h
失败configure: error: could not find magic.h
。
我如何在Docker中执行无声的pecl_http安装?
你的pecl install
问你这个问题:
是否启用响应内容types猜测; 指定libmagic目录[no]:
yes "\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
语句来充分利用dockercaching。