php - 我正在尝试将docker用于带有ngnix的php5.6,但配置存在问题
问题描述
您好,我需要在本地机器上设置 php5.6。以下是 docker-compose.yml 文件
version: '3'
networks:
laravel:
services:
nginx:
image: nginx:stable-alpine
container_name: nginx
ports:
- "8000:80"
volumes:
- ./src:/var/www
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
networks:
- laravel
php:
image: gotechnies/php-5.6-alpine
container_name: php
volumes:
- ./src:/var/www
ports:
- "9000:9000"
networks:
- laravel
ngnix 配置文件
server {
listen 80;
index index.php index.html;
server_name localhost;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/public;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
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 -d 命令后,输出如下。
但是当我尝试访问http://localhost:8000时,我无法呈现页面。
解决方案
要使用 NGINX 运行 PHP5.6,您需要执行以下操作:
目录布局。所有的网络文件都在你的本地src/
目录中
对于nginx/default.conf使用以下内容:
server {
listen 80;
index index.php index.html;
server_name localhost;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/html;
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;
}
}
对于src/index.php(测试以确保 PHP 正常工作)
<? echo phpinfo(); ?>
对于您的 docker-compose.yml,我删除了很多您不需要的东西:
version: "3"
services:
nginx:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./src/:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
php:
image: mikolatero/php5.6-fpm-alpine
volumes:
- ./src/:/var/www/html
执行docker-compose up
。导航到http://localhost:8080/index.php,您应该会看到 PHP 信息页面:
改变了什么?
在这种情况下,我选择了最新的 NGINX 并为 PHP5.6-FPM 找到了一个很好的图像并将其用于堆栈。
对于挂载的卷,我将目录移动到与 Docker Compose 文件相同的上下文中。没有必要,但从笔记本电脑运行时可能更便携。您安装的 Web 源可能/应该是您的 Web 存储库的位置。我还使用了 NGINX 映像中 Web 文件的众所周知的位置/var/www/html
PHP5.6-FPM 与 Web 源安装到同一目录,因此 PHP 可用于该目录中的文件。
最后,我去掉了networks
as,除非你有特定的原因,否则没有必要,因为这些图像将使用默认的 Docker 网络。
推荐阅读
- expo - Expo-speech 在某些 iOS 设备上不起作用
- css - JavaFX/FXML:ImageView 和 BorderPane 内的标签不显示
- angular - 如何获取指令的主机组件实例?
- java - 如何在Java的WHILE循环中检查整数是正数还是负数?
- sql - PostgreSQL:如果列中的值已经存在,则过滤掉行
- r - 在代码中更改所有 ggplot 输出的字体,而不是在每个绘图中更改一次?
- java - Android 操作共享首选项 - 更新值
- linux - 如何覆盖来自kafka消费者的csv中的数据
- ontology - 如何使用 owlapi 确定最不常见的子消费者
- reactjs - 是否需要在 useEffect 返回挂钩中将 useState 设置为其默认值?