如何通过 unix socket 在 Kubernetes 中运行 PHP?

2 cloud docker kubernetes google-kubernetes-engine

我在 Google Container Engine 中有 nginx 和 php-fpm 容器,我想通过 unix socket 而不是网络来运行它。

我还有 Google SQL 代理容器,它使用空卷通过放置在与其他容器共享的卷上的套接字提供与 Google SQL 数据库的连接。所以我想对 PHP 使用相同的方法,但它不起作用。

我将 emptyDir 类型的空卷安装到 php 和 nginx 容器。卷已安装,我可以在两个容器中看到它。但是,如果我尝试使用 nginx,我会在日志中找不到 (socket) 文件。

我还将 www-data(与 php 容器中的 uid 相同)用户添加到 nginx 容器中,并将其设置在 nginx conf 中,但没有帮助。

谷歌 SQL 代理在某些方面是否特殊,我必须使用网络来处理 PHP 还是我在这里遗漏了什么?

Tom*_*Tom 8

我设法使您描述的方法起作用。我emptyDir在 a 中使用了deployment一个共享/sock文件夹,它同时挂载到了 nginx 和 fpm:

  - name: fpm
    ...
    volumeMounts:
    - name: php-socket
      mountPath: /sock
    ...

  - name: nginx
    ...
    volumeMounts:
    - name: php-socket
      mountPath: /sock
    ...

  volumes:
  - name: php-socket
    emptyDir: {}
Run Code Online (Sandbox Code Playgroud)

我发现这篇文章对实际的 nginx 和 fpm 配置很有帮助:https : //medium.com/@shrikeh/setting-up-nginx-and-php-fpm-in-docker-with-unix-sockets-6fdfbdc19f91

我遇到的问题是我的 php-fpm docker 容器配置中的一个文件,zz-docker.conf其中包含listen = [::]:9000. 由于文件的名称按字母顺序排列,它正在破坏我的其他配置文件,停止 unix 套接字通信工作(即listen = /sock/php.sock)。我在以下内容中使用它删除了问题行Dockerfile

sed -i -e ‘/listen/d’ /usr/local/etc/php-fpm.d/zz-docker.conf
Run Code Online (Sandbox Code Playgroud)