GCP Cloud 运行容器服务:[pool www] 无法写入套接字 '/run/php-fpm/www.sock' 的 ACL

Posted

技术标签:

【中文标题】GCP Cloud 运行容器服务:[pool www] 无法写入套接字 \'/run/php-fpm/www.sock\' 的 ACL【英文标题】:GCP Cloud run container service : [pool www] failed to write the ACL of the socket '/run/php-fpm/www.sock'GCP Cloud 运行容器服务:[pool www] 无法写入套接字 '/run/php-fpm/www.sock' 的 ACL 【发布时间】:2021-01-24 05:04:54 【问题描述】:

我在 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"]

【问题讨论】:

检查this thread 以获得提示。 我试过这些技术还是不行 setfacl 使用了哪些参数? 【参考方案1】:

经过大量搜索并找到线索后,我得到了解决方案。 大多数在线解决方案都建议在 /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_userslisten.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。

【讨论】:

以上是关于GCP Cloud 运行容器服务:[pool www] 无法写入套接字 '/run/php-fpm/www.sock' 的 ACL的主要内容,如果未能解决你的问题,请参考以下文章

如何对 GCP Cloud Run 上的联合 GraphQL 服务进行身份验证?

在一个 GCP 项目中来自 Cloud Run 应用的 HTTP 503 错误,但在另一个项目中没有

Spring GCP 服务未连接到 Cloud SQL 数据库

使用 Google Cloud 服务帐户是 VSTS 构建

Terraform GCP:无需用户停机即可更新 Cloud Run 服务

用于 Google Cloud 外部服务器的 agentPath 上的 Stackdriver GCP 多个代理