我正在尝试创建两个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:
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/
当请求到达Web服务器时,在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/