我怎么能有一个容器中的nginx和另一个php-fpm?

我正在尝试创build两个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

这是我的nginx容器的Dockerfile

FROM nginx:最新的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; } } 

这是我所有的nginxconfiguration。

PHP

这是./php目录中的./php

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

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

问题

我运行docker-compose up ,当我尝试打开192.168.99.100 (Docker引擎正在运行的docker机器的IP)时,我File not found 。 我也尝试过192.168.99.100/app.php ,但是它是一样的。

我configuration错了什么? 我在互联网上的一个例子中看到,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/ 

在做了其他答案中提出的建议之后,在这个问题上花了大约六个小时或更长的时间之后,我发现我设置的原因没有起作用,因为docker-compose up不会重建你的图像,所以在容器是旧版本。

所以,解决这个问题就像docker-compose build ,然后docker-compose up

对不起,让大家的时间。