由于Ubuntu 14.04的停产,我试图从14.04迁移到16.04。 不幸的是,默认情况下16.04 LTS支持php 7,而我们的代码库是用PHP 5编写的。 Xenial不再支持与PHP 5相关的库,例如php5-cgi php5-mysql php5-curl。 因此,我正在尝试使用PHP 5.6,以便暂时不更改代码。
我的Docker文件具有以下代码,仅安装lighttpd和php5.6。
FROM ubuntu:16.04
RUN apt-get update -y
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get purge `dpkg -l | grep php| awk '{print $2}' | tr "\n" " "` \
&& apt-get install -y software-properties-common \
&& LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php \
&& apt-get update -y \
&& apt-get purge --auto-remove ubuntu-core-launcher \
&& apt-get install -y lighttpd php5.6 php5.6-fpm php5.6-cgi
RUN apt-get install -y vim net-tools
RUN mkdir /srv/app && mkdir /srv/run
WORKDIR /srv/app
ADD . /srv/app
RUN chmod -R 777 /var/log/lighttpd && chmod -R 777 /var/cache/lighttpd && chmod -R 775 /srv/run
RUN touch /srv/run/lighttpd.pid && chmod 777 /srv/run/lighttpd.pid
RUN sed -i -e "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g" /etc/php/5.6/fpm/php.ini
RUN sed -i -e "s/server.document-root/#server.document-root/g" /etc/lighttpd/lighttpd.conf \
&& sed -i -e 's/\/var\/run\/lighttpd.pid/\/srv\/run\/lighttpd.pid/g' /etc/lighttpd/lighttpd.conf \
&& sed -i -e "s/80/8888/g" /etc/lighttpd/lighttpd.conf \
&& echo "server.document-root = \"/srv/app\"" >> /etc/lighttpd/lighttpd.conf \
&& echo "server.network-backend = \"writev\"" >> /etc/lighttpd/lighttpd.conf \
&& echo "server.modules += (\"mod_fastcgi\")" >> /etc/lighttpd/lighttpd.conf
EXPOSE 8888
ENTRYPOINT ["lighttpd", "-D", "-f", "/etc/lighttpd/lighttpd.conf"]
运行命令:docker run -d -p 8888:8888 test-image:4.0
我有一个index.html –工作文件夹中的Hello world代码,运行后,我可以在localhost:8888 / index.html上获取index.html。 我也有一个显示phpinfo()的index.php,当我尝试localhost:8888 / index.php时,出现403 Forbidden错误。
我还尝试在Dockerfile中添加以下行,
RUN mv /etc/lighttpd/conf-available/15-fastcgi-php.conf /etc/lighttpd/conf-enabled
RUN sed -i -e "s/php-cgi/php-cgi5.6/g" /etc/lighttpd/conf-enabled/15-fastcgi-php.conf
构建并运行后,服务器立即退出, docker ps -a的状态为退出(0)。
如果有人可以帮助我弄清楚如何使用此docker配置运行我的php代码,这将很有帮助。 谢谢。