gpt4 book ai didi

php - 如何在一个容器中安装 nginx 而在另一个容器中安装 php-fpm?

转载 作者:搜寻专家 更新时间:2023-10-31 20:35:21 27 4
gpt4 key购买 nike

我正在尝试创建两个 docker 容器。一个包含 nginx,另一个包含 php-fpm。这是我的 docker-compose.yml:

version: '2'
services:
nginx:
build: ./nginx
ports:
- "80:80"
- "443:443"
fpm:
build: ./php
volumes:
- ./php/code:/var/www/html/

NGINX

这是我的 Dockerfile 用于 nginx 容器:

FROM nginx:latest RUN rm /etc/nginx/conf.d/default.conf COPY ./default.conf /etc/nginx/conf.d/

而且,这是我的 default.conf:

server {
listen 80;

server_name localhost;
root /var/www/html;

error_log /var/log/nginx/localhost.error.log;
access_log /var/log/nginx/localhost.access.log;

location / {
# try to serve file directly, fallback to app.php
try_files $uri /app.php$is_args$args;
}

location ~ ^/.+\.php(/|$) {
fastcgi_pass fpm:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
}

这就是我所有的 nginx 配置。

PHP

这是 ./php 目录中的 Dockerfile:

from php:fpm
COPY ./code/ /var/www/html/

./code 目录中,我有一个名为 app.php 的文件,其中包含 phpinfo()

问题

我运行 docker-compose up,当我尝试打开 192.168.99.100(运行 docker 引擎的 docker 机器的 IP)时,我得到 找不到文件。我也试过192.168.99.100/app.php,但还是一样。

我哪里配置错了?我在 Internet 上的一个示例中看到 PHP 文件必须位于 nginx 容器中,但这没有任何意义,因为据我所知,php-fpm 是必须有权访问这些文件的进程。

最佳答案

404 错误的原因是您的 Nginx 容器中没有文件。

您必须将您链接到 PHP-FPM 容器中的相同文件链接到 Nginx 容器中:

version: '2'
services:
nginx:
build: ./nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./php/code:/var/www/html/

fpm:
build: ./php
volumes:
- ./php/code:/var/www/html/

当请求到达网络服务器时,该文件必须至少存在,然后 Nginx 才能将请求传递给 PHP-FPM 容器。您甚至可以将文件夹设置为对 Nginx 容器只读:

version: '2'
services:
nginx:
build: ./nginx
ports:
- "80:80"
- "443:443"
volumes:
- ./php/code:/var/www/html/:ro

fpm:
build: ./php
volumes:
- ./php/code:/var/www/html/

关于php - 如何在一个容器中安装 nginx 而在另一个容器中安装 php-fpm?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36975667/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com