我被要求对在 Docker 容器内运行的旧 PHP 项目进行一些调整。为了进行这些调整,我尝试运行应用程序和相关容器的本地工作副本。
docker 容器运行 Alpine Linux。我尝试转到我的索引页,但浏览器一直旋转,只要请求处于活动状态,以下重复日志输出就会循环:
php-fpm_1 | [2018 年 4 月 25 日 17:35:54] 错误:无法 ptrace(ATTACH)子级 25:操作不允许(1)php-fpm_1
| [2018 年 4 月 25 日 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 - 2018 年 4 月 25 日:17:35:50 +0200“GET /app_dev.php”404 php-fpm_1 | [2018 年 4 月 25 日 17:35:55] 错误:无法 ptrace(ATTACH)子进程 24:操作不允许 (1) php-fpm_1 | [2018 年 4 月 25 日 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 - 2018 年 4 月 25 日:17:35:49 +0200“GET /app_dev.php”404
... ETC ...
我发现了一个不同的 serverfault 帖子建议手动运行audit2allow
——一个我从未使用过的实用程序——以修复类似的问题。但 Alpine Linux 没有附带该实用程序,我的容器中也没有 APK 包管理器。在完成安装这些实用程序的大量工作之前,我想知道:
这是audit2allow
可行的方法吗,或者还有其他可行的解决方案吗?
=====
编辑:正如 Gerald 所评论的,audit2allow 工具是 selinux 的一部分,而 Alpine 的这个版本中没有这个工具。因此,肯定有其他方法可以解决此错误。
答案1
事实证明,这是一个应用程序问题,而不是环境问题。我需要对一个充满静态资产的文件夹进行符号链接。
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; \
一旦我这样做了,问题就消失了。