Debian 7(Wheezy)中Docker部署PHP5.6无法正常运行求助
解决Debian7 Docker容器中PHP5.6无法在Apache下运行的问题
我来帮你排查这个PHP不运行的问题,结合你的Docker配置,这里有几个关键问题和修复方案:
1. Dotdeb源的配置顺序错误
你当前的Dockerfile里先添加了Dotdeb源并执行了apt-get update,之后才导入GPG密钥——这会导致第一次update时因为源未被信任而跳过相关包的更新,可能导致PHP或Apache模块安装不完整。
修复方法:调整步骤顺序,先获取GPG密钥,再添加源并执行update:
FROM debian:7 # 先安装wget工具 RUN apt-get update && apt-get install -y wget # 导入Dotdeb的GPG密钥 RUN wget http://www.dotdeb.org/dotdeb.gpg -O- | apt-key add - # 再添加Dotdeb源 RUN echo "deb http://packages.dotdeb.org wheezy-php56 all" >> /etc/apt/sources.list.d/dotdeb.list RUN echo "deb-src http://packages.dotdeb.org wheezy-php56 all" >> /etc/apt/sources.list.d/dotdeb.list # 现在执行update才能正确拉取可信的源 RUN apt-get update # 安装所需软件包 RUN apt-get install -y freetds-common freetds-bin unixodbc apache2 \ php5-sybase php5 libapache2-mod-php5 php5-cli php5-fpm nano curl # 后续目录和文件复制步骤 WORKDIR /var/www RUN rm /var/www/index.html COPY assets ./assets COPY phpStorm-CC-Helpers-master ./phpStorm-CC-Helpers-master COPY pushnotification ./pushnotification COPY uploads ./uploads COPY web.config . COPY index.php . # 启用PHP模块并确保Apache配置正确 RUN a2enmod php5 # 确保Apache默认站点配置包含PHP处理规则 RUN echo 'AddType application/x-httpd-php .php' >> /etc/apache2/sites-available/000-default.conf RUN echo 'DirectoryIndex index.php index.html' >> /etc/apache2/sites-available/000-default.conf # 启动Apache的正确命令 CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]
2. Apache默认配置缺失PHP处理规则
即使启用了php5模块,Apache可能没有默认配置来识别.php文件并交给PHP处理器处理。上面修改的Dockerfile里已经添加了AddType和DirectoryIndex配置,确保Apache优先解析index.php并处理PHP文件。
3. 权限问题(可选但重要)
你在docker-compose里设置Apache以root用户运行,虽然能避免部分权限问题,但挂载的application和system目录在容器内的权限可能还是会影响PHP读取文件。可以在Dockerfile末尾添加权限调整:
RUN chown -R www-data:www-data /var/www
同时把docker-compose里的环境变量改回默认的www-data(更安全):
environment: - APACHE_RUN_USER=www-data - APACHE_RUN_GROUP=www-data
验证步骤
- 重新构建镜像:
docker-compose build - 启动容器:
docker-compose up -d - 进入容器检查PHP模块是否加载:
docker exec -it gen365-cms apache2ctl -M | grep php,如果输出php5_module (shared)说明模块已正确加载。 - 在/var/www目录创建一个
info.php文件,内容为<?php phpinfo(); ?>,然后访问http://localhost:8081/info.php,如果能看到PHP信息页面,说明问题解决。
内容的提问来源于stack exchange,提问作者joe
相关产品推荐
相关产品推荐

