На 12-летнем (веб) сервере все еще размещено 1 старое (пользовательское) приложение PHP. Мы хотим выключить этот сервер и снять его со стойки. К сожалению, нам все еще нужно приложение, оно больше не используется активно, но должно быть доступно для архивирования. Приложение не поддерживает более новые версии PHP, чем v5.2. По этой причине я хотел разместить приложение в контейнере докера (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=====
Конфигурация PHP в apache (уже установлена по умолчанию для соответствующего образа докера). Я не вносил никаких изменений в контейнер докера, кроме упомянутых выше изменений.
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 доступен для чтения, записи и поиска, первый файл index.php, который я туда поместил, был успешно выполнен, когда я посетил http: // localhost: 9090 /.
Когда я, как и вы, пытаюсь "запустить докер" с идентификатором докера,
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.