我正在尝试创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
容器的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
:
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
。
对不起,让大家的时间。