Docker 通过php fpm容器中的容器化Nginx文件提供服务?

Docker 通过php fpm容器中的容器化Nginx文件提供服务?,docker,nginx,docker-compose,Docker,Nginx,Docker Compose,我的应用程序文件位于phpfpm容器中,我需要通过nginx提供它们。我希望避免在两个容器中装载相同的文件,因此我正在尝试找到一种方法,只从一个容器中提供它们,phpfpm。当我对其他容器使用反向代理时: 我收到带有以下错误日志记录的502坏网关错误: 1 recv()从上游读取响应头时失败(104:由对等方重置连接),客户端:172.18.0.1,服务器:myapp.test,请求:“GET/HTTP/1.1”,上游:,主机:“myapp.test” 我猜这是因为phpfpm容器不是HTTP服

我的应用程序文件位于
phpfpm
容器中,我需要通过
nginx
提供它们。我希望避免在两个容器中装载相同的文件,因此我正在尝试找到一种方法,只从一个容器中提供它们,
phpfpm
。当我对其他容器使用反向代理时:

我收到带有以下错误日志记录的502坏网关错误:

1 recv()从上游读取响应头时失败(104:由对等方重置连接),客户端:172.18.0.1,服务器:myapp.test,请求:“GET/HTTP/1.1”,上游:,主机:“myapp.test”

我猜这是因为
phpfpm
容器不是HTTP服务器

因此,或者,我尝试使用
fastcgi\u pass
如下:

server {
    listen 0.0.0.0:8080;
    server_name myapp.test;

    root /app;

    location / {
        try_files $uri $uri/index.php;
    }

    location ~ \.php$ {
        fastcgi_pass phpfpm:9000;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
}
它按预期提供
*.php
文件,但不提供其他文件,即静态内容

如何使
nginx
同时为
.php
和我的
phpfpm
容器中的静态文件提供服务

这是我的docker-compose.yml:

版本:“3.7”
服务:
phpfpm:
图片:“php fpm:7.3”
卷数:
-/站点:/app
端口:
- "9000:9000"
nginx:
图片:“nginx:1.17”
卷数:
-./nginx/app.conf:/opt/nginx/conf/nginx.conf
端口:
- "80:8080"
您有两个问题:

  • 您没有将静态内容装载到Nginx容器中,因此无法提供服务。将此卷添加到容器中
  • 您需要设置Nginx配置以提供此静态内容。你可以试试这个

我忘了在我的问题中提到,我开始修补它,正是因为我想避免两次装载相同的应用程序文件,我想只提供一个php fpm,在本例中是容器。但是,您的答案中提供的配置对我非常有用,因此我将对其进行升级!
server {
    listen 0.0.0.0:8080;
    server_name myapp.test;

    root /app;

    location / {
        try_files $uri $uri/index.php;
    }

    location ~ \.php$ {
        fastcgi_pass phpfpm:9000;
        fastcgi_index index.php;
        include fastcgi.conf;
    }
}
./site/public/:/var/www/html/public/:ro
server {
    listen 0.0.0.0:8080;
    server_name myapp.test;
    root /var/www/html/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass phpfpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi.conf;
    }
}