php - GCP Cloud 运行容器服务:[pool www] 无法写入套接字 '/run/php-fpm/www.sock' 的 ACL
问题描述
我在 AWS ECS fargate 上运行基于 Web 的容器化应用程序已有几个月了。但由于 AWS 的一些问题,我的团队计划将它与 GCP 结合使用多云。因此,当在 GCP Cloud Run 上部署我的容器映像时,它会给我这个错误
ERROR: [pool www] failed to write the ACL of the socket '/run/php-fpm/www.sock': Operation not permitted (1)"
ERROR: FPM initialization failed
然后我尝试使用 /run/php-fpm 更改权限
chmod 777 -R /run/php-fpm
它再次向我显示相同的错误
在我在本地运行容器并执行到容器中以检查 www.sock 文件之后,它的权限是
srw-rw----+ root root www.sock
/run/php-fpm 的权限是
drwxrwxrwx. root root php-fpm
之后我尝试更改权限
chmod 777 -R /run/php-fpm/*
在 docker 文件中,但它给了我一个文件不存在的错误
我也尝试使用 setfacl 但是当我执行到容器中并在本地检查它时,www.sock 的权限没有改变,并且在部署在云上运行时给出相同的错误
我不想迁移到天蓝色,所以我只需要云运行的解决方案。我正在使用端口 80 向 docker 文件公开
这是我的 dockerfile
FROM amazonlinux:2
# Environment variables
ENV PORT 80
# Install dependencies
RUN amazon-linux-extras install php7.2
RUN yum clean metadata && yum update -y && \
yum install -y \
curl \
httpd httpd-tools\
git \
openssh-server \
openssh-clients \
php-cli php-pdo php-fpm php-json \
php-bcmath \
php-cli \
php-common \
php-dba \
php-devel \
php-embedded \
php-enchant\
php-gd\
php-intl \
php-lda\
php-mbstrin\
php-mysqlnd \
php-odbc \
php-pd\
php-pear.noarch \
php-pgsql\
php-process \
php-pspel \
php-recode \
php-snmp \
php-soap \
php-xml \
php-xmlrpc \
php-mbstring \
unzip \
&& ln -s /usr/sbin/httpd /usr/sbin/apache2 \
&& curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/composer \
&& ln -s /usr/local/bin/composer /usr/bin/composer
COPY github_key .
COPY httpd.conf /etc/httpd/conf/httpd.conf
# Install app
RUN rm -rf /var/www/html/* && mkdir -p /var/www/html
# git clone command
#few sed commands
WORKDIR /var/www/html/
RUN composer require mpdf/mpdf && \
chmod 777 -R vendor/mpdf/mpdf/tmp
EXPOSE $PORT
ENTRYPOINT ["sh", "-c", "/usr/sbin/php-fpm && /usr/sbin/apache2 -DFOREGROUND"]
解决方案
好吧,经过大量搜索并找到了线索,我得到了解决方案。大多数在线解决方案建议在 /etc/php-fpm.d/www.conf 中设置值
;listen.owner = nginx
;listen.group = nginx
listen.acl_users = apache, nginx
listen.acl_groups = apache, nginx
但这不起作用为了在 Cloud Run上
完美部署,我们必须评论listen.acl_users和listen.acl_groups
;listen.acl_users = apache, nginx
;listen.acl_groups = apahce, nginx
为此,我在 Dockerfile 中使用 sed 命令
RUN sed -i 's/listen.acl_users/;listen.acl_users/g' /etc/php-fpm.d/www.conf
RUN sed -i 's/listen.acl_groups/;listen.acl_groups/g' /etc/php-fpm.d/www.conf
之后,我的应用程序将完美地部署在 Cloud Run 上,但在 AWS ECS Fargate 上开始出现错误。所以,我最终为每个服务制作了 2 个不同的 Dockerfile。
推荐阅读
- javascript - Angular Material按钮单击动画错误
- javascript - JavaScript 和 Node.js - 了解函数参数并知道要提供什么?
- c - 将输出重定向到文件时 printf() 和 system() 的结果顺序错误
- c# - 获取用户为其 PC 设置的默认下载位置
- laravel - 无法将关联数组传递给 vue
- java - 我的应用程序未在高于 Marshmallow 的操作系统版本上运行
- python - 使用 PyMongo 重命名嵌入文档中的字段
- thingsboard - 事物板。规则链。在一个会话中重复调用 REST API
- jquery - 如何在materializecss datepicker中添加清除和今天按钮?
- c# - 关于 docx 到 pdf 转换的奇怪问题