如何在docker中使用unix套接字将nginx连接到php-fpm

Liu*_*zhe 5 php nginx docker docker-compose

有我的docker-compose.yml

version: '2'

services:
    web:
        image: nginx:latest
        ports:
            - "8018:80"
        volumes:
            - ./code:/code
            - ./site.conf:/etc/nginx/conf.d/default.conf
            - /private/var/log/nginx:/var/log/nginx
            - /private/var/run/php7-fpm.sock:/var/run/php7-fpm.sock
        networks:
            - code-network
    php:
        image: php:fpm
        volumes:
            - ./code:/code
            - ./php-fpm.conf:/usr/local/etc/php-fpm.conf
            - ./www.conf:/usr/local/etc/php-fpm.d/www.conf
            - /private/var/run/php7-fpm.sock:/var/run/php7-fpm.sock
        networks:
            - code-network

networks:
    code-network:
        driver: bridge
Run Code Online (Sandbox Code Playgroud)

在site.conf中,我这样写,fastcgi_pass unix:/var/run/php7-fpm.sock;我还将监听地址更改为listen = /var/run/php7-fpm.sockwww.conf。在我的MAC中,在文件夹/ p​​rivate / var / run中以模式666运行了一个名为php7-fpm.sock的文件。

运行之后docker-compose up -d,容器运行成功。但是当我访问http:// localhost:8018时,它返回了502。检查了nginx错误日志后,我发现了这一点

2017/11/01 13:08:39 [错误] 6#6:* 1连接()到Unix:/var/run/php7-fpm.sock在连接到上游时失败(111:连接被拒绝),客户端:172.18 .0.1,服务器:本地主机,请求:“ GET / HTTP / 1.1”,上游:“ fastcgi:// unix:/var/run/php7-fpm.sock:”,主机:“ localhost:8018”

顺便说一句,在尝试使用unix套接字模式之前。我以tcp / ip模式成功访问了http:// localhost:8018。

Liu*_*zhe 6

在我检查了如何通过unix套接字设置Apache2和PHP-FPM之后?,我将docker-compose.yml更改为

version: '2'

services:
    web:
        image: nginx:latest
        ports:
            - "8018:80"
        volumes:
            - ./code:/code
            - ./site.conf:/etc/nginx/conf.d/default.conf
            - /private/var/log/nginx:/var/log/nginx
            - "phpsocket:/var/run"
        networks:
            - code-network
    php:
        image: php:fpm
        volumes:
            - ./code:/code
            - ./php-fpm.conf:/usr/local/etc/php-fpm.conf
            - ./www.conf:/usr/local/etc/php-fpm.d/www.conf
            - ./zz-docker.conf:/usr/local/etc/php-fpm.d/zz-docker.conf
            - "phpsocket:/var/run"
        networks:
            - code-network

networks:
    code-network:
        driver: bridge

volumes:
    phpsocket:
Run Code Online (Sandbox Code Playgroud)

并将zz-docker.conf覆盖为

[global]
daemonize = no

[www]
listen = /var/run/php7-fpm.sock
listen.mode = 0666
Run Code Online (Sandbox Code Playgroud)

最后,当我访问http:// localhost:8018时,出现了phpinfo页面!