首页 > 解决方案 > 通过fastcgi连接多个容器,nginx和php

问题描述

我有三个容器,mysql、phpfpm 和 nginx。

当我尝试运行 localhost:8080 时,出现此错误:

[error] 11#11: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.27.0.1, server: _,.
request: "GET / HTTP/1.1", upstream: "fastcgi://172.27.0.3:9000", host: "localhost:8080"

有人可以帮我吗?我想念什么?

这是我的docker-compose.yaml

version: '3'
services:
  php:
    build: php
    container_name: phpfpm
    expose:
      - '9002'
      - '9000'
    depends_on:
      - db
    volumes:
      - /srv/www/mito/app:/var/www/html
      - ./dockerlive/logs:/var/log
    command: /bin/bash -c "rm -rf /var/run/php && mkdir /var/run/php && rm -rf /run/php && mkdir /run/php && /usr/sbin/php-fpm7.4 -F -R"
  nginx:
    build: nginx
    container_name: webserver
    ports:
      - '8080:80'
    depends_on:
      - php
      - db
    volumes:
      - /srv/www/mito/app:/var/www/html
      - ./dockerlive/logs:/var/log/nginx
    environment:
      - NGINX_HOST=localhost
      - NGINX_PORT=80
    command: /bin/bash -c "nginx -g 'daemon off;'"
  db:
    build: database
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: 1
      MYSQL_DATABASE: mito

和 nginx 配置:

server {
    listen 80;
    listen [::]:80;

    server_name _;

    root /var/www/html;
    index index.html index.php;

    #error_log /var/log/nginx/mito.localhost-error.log;
    #access_log /var/log/nginx/mito.localhost-acces.log;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        #fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_pass    phpfpm:9000;
    }
}

标签: docker-compose

解决方案


我在某个地方发现了一个有用的想法,我已经实现了。

我在 nginx 和 php 卷中添加了一个条目:

- php-fpm-socket:/var/run/php

而且我还在主卷部分中定义了它,没有任何参数。


推荐阅读