在 12 年的(网络)服务器上仍然托管 1 个旧的(自定义)PHP 应用程序。我们要关闭此服务器并将其从机架中移除。不幸的是,我们仍然需要该应用程序,不再积极使用,但需要可用于存档目的。该应用程序不支持比 v5.2 更新的 PHP 版本。出于这个原因,我想将应用程序托管在 docker 容器中(https://hub.docker.com/r/kuborgh/php-5.2/dockerfile)
我启动了容器,该容器docker run --publish 9090:80 --name xxproject -v /var/docker_mounts/xxproject:/project e28e8b71a1f7
将我的应用程序文件夹(xxproject)安装在主机上/project
,即容器中的文件夹。当我index.html
在主机上的 xxproject 文件夹中添加一个并浏览到 ip:9090 时,我看到了预期的内容。
当我index.html
与index.php
文件(内容:)交换时,Hello world
我得到了http 500
响应。
当我检查 apache 错误日志(在容器中:)时,docker exec -it xxproject bash
我没有得到任何条目。日志有效,因为我在进入网站时可以看到一个调试条目。
(/etc/apache2/sites-enabled/000-project.conf
我LogLevel debug
在容器中添加用于测试目的):
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /project
<Directory /project>
Options FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
LogLevel debug
</VirtualHost>
中唯一的日志条目/var/log/apache2/error.log
[Thu Aug 06 06:47:00 2020] [debug] mod_deflate.c(700): [client 10.128.10.41] Zlib: Compressed 0 to 2 : URL /index.php
[Thu Aug 06 06:47:01 2020] [debug] mod_deflate.c(700): [client 10.128.10.41] Zlib: Compressed 0 to 2 : URL /index.php
我在/var/log/apache2/other_vhost_names.log
172.17.0.3:80 10.128.10.41 - - [06/Aug/2020:06:47:00 +0000] "GET / HTTP/1.1" 500 375 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
172.17.0.3:80 10.128.10.41 - - [06/Aug/2020:06:47:01 +0000] "GET / HTTP/1.1" 500 375 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36"
当我检查php -a
交互式 php 终端按预期工作时。我怎样才能进一步调试这个问题?我知道 php 5.2 和 Ubuntu 12 已被弃用,不建议继续使用它们,但这是题外话!
=====更新 1 =====
apache 中的 PHP 配置(已经为相关的 docker 映像默认设置)。除了上面提到的更改之外,我没有对 docker 容器进行任何更改。
root@63ca87239042:/etc/apache2# grep -ri -B 2 -A 2 php .
./mods-enabled/dir.conf-<IfModule mod_dir.c>
./mods-enabled/dir.conf-
./mods-enabled/dir.conf: DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
./mods-enabled/dir.conf-
./mods-enabled/dir.conf-</IfModule>
--
./mods-enabled/php5.load:LoadModule php5_module /usr/lib/apache2/modules/libphp5.so
--
./mods-available/dir.conf-<IfModule mod_dir.c>
./mods-available/dir.conf-
./mods-available/dir.conf: DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
./mods-available/dir.conf-
./mods-available/dir.conf-</IfModule>
--
./mods-available/php5.load:LoadModule php5_module /usr/lib/apache2/modules/libphp5.so
--
./sites-available/default-ssl- # directives are used in per-directory context.
./sites-available/default-ssl- #SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
./sites-available/default-ssl: <FilesMatch "\.(cgi|shtml|phtml|php)$">
./sites-available/default-ssl- SSLOptions +StdEnvVars
./sites-available/default-ssl- </FilesMatch>
也许 Apache 不知道何时使用 php 模块?我找到了这个apache cwiki
这就是我启动容器的方式:
/tmp/project 是世界可读、可写和可搜索的,当我访问 http://localhost:9090/ 时,我放入其中的第一个 index.php 已成功执行。
当我像你一样尝试使用 docker id 来“docker run”时,
我收到一个错误,说找不到图像 e28e8b71a1f7。