為什麼返回 apache 一個 http 500 但不記錄任何錯誤?
在 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
AddHandler application/x-httpd-php .php .phtml Action application/x-httpd-php modules/libphp5.so
這就是我啟動容器的方式:
docker run --publish 9090:80 -v /tmp/project:/project kuborgh/php-5.2
/tmp/project 是世界可讀、可寫和可搜尋的,當我訪問 http://localhost:9090/ 時,我放入其中的第一個 index.php 已成功執行。
當我像你一樣嘗試使用 docker id 進行“docker run”時,
docker run --publish 9090:80 --name xxproject -v /var/docker_mounts/xxproject:/project e28e8b71a1f7
我收到一個錯誤,說找不到圖像 e28e8b71a1f7。
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bddc43202735 kuborgh/php-5.2 "/usr/sbin/apache2ct…" 18 hours ago Exited (137) 16 hours ago eager_ride $ docker run --publish 9090:80 --name AmehoelA -v /tmp/project:/project bddc43202735 Unable to find image 'bddc43202735:latest' locally docker: Error response from daemon: pull access denied for bddc43202735, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.