我想运行一些简单的index.php文件,使用官方的nginx和php docker映像。
- ubuntu版本是16.04.1 LTS(我的主机)
- Docker版本为1.12.6
1.停靠-合成版本1.9.0
我在主机上的本地目录如下所示:
\code
index.php
docker-compose.yml
nginx.conf
index.php包含一些简单的代码:
<?php
echo phpinfo();
?>
docker-compose. yml包含以下指令(版本1):
web:
image: nginx:latest
ports:
- "8181:80"
volumes:
- ./code:/code
- ./nginx.conf:/etc/nginx/nginx.conf
links:
- php
php:
image: php:7-fpm
volumes:
./code:/code
nginx. conf包含以下指令(版本1):
worker_processes 1
events { worker_connections 1024; }
http {
sendfile on;
server {
listen 80;
index index.php index.html;
root /code;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
}
在所有这些情况下,我运行命令:
docker-compose up --force-recreate
我在控制台中看到两个映像都已创建,但是,当我转到localhost:8181时,我收到一条错误消息。
页面没有找到(2:无此类文件或目录),客户端:www.example.com,服务器:,请求:172.17.0.1"本地主机:8181" "GET / HTTP/1.1", host: "localhost:8181"
我真的很想知道,为什么它在/etc/nginx/html/
文件夹中搜索,并忽略nginx. conf文件中的root /code;
指令。尽管如此,我编辑了docker-compose. yml,使它现在看起来像这样:
web:
image: nginx:latest
ports:
- "8181:80"
volumes:
- ./code:/etc/nginx/html
- ./nginx.conf:/etc/nginx/nginx.conf
links:
- php
php:
image: php:7-fpm
volumes:
./code:/code
如您所见,我只更改了web/volumes下的一条指令:
./code:/code -> ./code:/etc/nginx/html
现在,当我重新运行docker-compose up --force-recreate
并转到localhost:8181时,我看到另一条错误消息:
FastCGI在标准错误中发送:从上游读取响应标头时出现"主脚本未知",客户端:www.example.com,服务器:,请求:172.17.0.1"快速目录名称://172. 17. 0. 2:9000",主机:"本地主机:8181" "fastcgi://172.17.0.2:9000", host: "localhost:8181"
现在我不知道这一切意味着什么。在那之后我尝试了许多不同的指令组合在nginx. conf,但它每一次我结束了与完全相同的错误信息失败。所以,我的问题是我如何才能使它工作?如何docker-compose. yml和nginx. conf应该看起来像在ordrr能够运行世界上最简单的脚本?
2条答案
按热度按时间svmlkihl1#
你的php容器卷定义中缺少"-"。
应为:
我自己测试了一下,经过修正后,它工作得很好:
ygya80vv2#
如果您想在没有停靠合成的情况下执行此操作,也可以:要用你的
/code
文件夹作为web根目录启动docker php容器,你可以使用以下命令:或者从当前目录(计算机上的任何位置)执行此操作: