2016-11-23 66 views
1

我在Google Container Engine中有nginx和php-fpm容器,我想通過unix套接字而不是網絡運行它。如何通過unix套接字在Kubernetes中運行PHP?

我也有Google SQL代理容器,它使用空卷通過放置在與其他容器共享的捲上的套接字提供與Google SQL數據庫的連接。所以我想爲PHP使用相同的方法,但它不起作用。

我有空的emptyDir類型的卷掛載到php和nginx容器。卷被安裝,我可以在兩個容器中看到它。但是如果我嘗試使用nginx,我會在日誌中找不到(套接字)文件。

我還將www-data(與php容器中的uid相同)用戶添加到nginx容器中,並將其設置在nginx conf中,但它沒有幫助。

Google SQL代理服務器在某些方面很特別,我必須爲PHP使用網絡,或者我在這裏丟失了什麼?

+0

爲什麼要使用unix套接字? – svenwltr

+0

我認爲你不應該使用emptyDir。使用hostVolume來安裝您的unix套接字。 – iamnat

回答

1

我設法讓你描述的方法工作。我用一個deployment一個emptyDir因此共享/sock文件夾安裝到兩個nginx的和FPM:

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

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

    volumes: 
    - name: php-socket 
    emptyDir: {} 

我發現實際n​​ginx的和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 
相關問題