Меня попросили внести пару изменений в устаревший проект PHP, работающий внутри контейнера докеров. Чтобы внести эти изменения, я пытаюсь запустить локальную рабочую копию приложения и связанный с ним контейнер.
Контейнер докеров работает под управлением Alpine linux. Я пытаюсь перейти на свою страницу индекса, и браузер просто вращается бесконечно, со следующим повторяющимся циклом вывода журнала, пока запрос активен:
php-fpm_1 | [25-апр-2018 17:35:54] ОШИБКА: не удалось выполнить ptrace (ATTACH) потомка 25: операция запрещена (1) php-fpm_1
| [25-апр-2018 17:35:54] ПРЕДУПРЕЖДЕНИЕ: [pool www] дочерний элемент 25, сценарий '/usr/src/app/web/app_dev.php' (запрос: «GET /app_dev.php») выполняется слишком медленно (2.455295 сек), логирование php-fpm_1 | 172.23.0.3 - 25 / апр / 2018: 17: 35: 50 +0200 "GET /app_dev.php" 404 php-fpm_1 | [25-апр-2018 17:35:55] ОШИБКА: не удалось выполнить ptrace (ATTACH) дочернего элемента 24: операция не разрешена (1) php-fpm_1 | [25-апр-2018 17:35:55] ПРЕДУПРЕЖДЕНИЕ: [pool www] дочерний элемент 24, сценарий '/usr/src/app/web/app_dev.php' (запрос: «GET /app_dev.php») выполняется слишком медленно (2.423747 сек), логирование php-fpm_1 | 172.23.0.3 - 25 / апр / 2018: 17: 35: 49 +0200 "GET /app_dev.php" 404
... и т.д ...
Я нашел другой пост serverfault который рекомендовал запускать вручную audit2allow
- утилита, которой я никогда не пользовался - чтобы исправить подобную проблему. Но в Alpine linux нет этой утилиты, и в моем контейнере нет диспетчера пакетов APK. Прежде чем приступить к серьезной работе по установке этих утилит, я хочу знать:
Является audit2allow
даже способ пойти с этим, или есть другое вероятное решение?
=====
Редактировать: Как прокомментировал Джеральд, инструмент audit2allow является частью selinux, которого нет в этой копии Alpine. Так что должен быть другой способ обойти эту ошибку.
Оказалось, что это проблема приложения, а не окружающей среды. Мне нужно было создать символическую ссылку на папку, полную статических ресурсов.
make assets-update
... который, в свою очередь, обертывает:
app/console bazinga:js-translation:dump
app/console assets:install
app/console assetic:dump
@if [ ! -h web/storage ]; then \
ln --symbolic ../data/storage web/storage; \
Как только я это сделал, проблема исчезла.