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_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。
【讨论】:
以上是关于GCP Cloud 运行容器服务:[pool www] 无法写入套接字 '/run/php-fpm/www.sock' 的 ACL的主要内容,如果未能解决你的问题,请参考以下文章
如何对 GCP Cloud Run 上的联合 GraphQL 服务进行身份验证?
在一个 GCP 项目中来自 Cloud Run 应用的 HTTP 503 错误,但在另一个项目中没有
Spring GCP 服务未连接到 Cloud SQL 数据库