我正在尝试在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,只需在每次提示后按Enter键即可。我刚刚了解了yes
,它似乎符合我的需要。在线搜索表明,很多人用它来执行无人值守的pecl安装,包括pecl_http;但是,当我尝试在我的docker容器中使用它时,它会失败并显示configure: error: could not find magic.h
。
如何在Docker中执行静默pecl_http安装?
答案 0 :(得分:4)
您的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缓存。