![](/img/trans.png)
[英]Convert docker-compose to Kubernetes for nginx & php-fpm containers
[英]Docker-compose Nginx php-fpm file not found
我有一个带有 php-fpm 和 nginx 的简单 docker-compose 配置,但我看不到任何 php 文件。 当我转到本地主机时,它显示找不到文件。
我尝试了我在网上能找到的所有东西,但我尝试过的一切都失败了。 它适用于 html,但不适用于 php 文件。 似乎是路径问题,或者类似的问题。
我在docker-compose logs
时遇到了这个错误:
project3-php_1 | 172.17.0.5 - 29/Mar/2016:13:29:12 +0000 "GET /index.php" 404
project3-front_1 | 172.17.0.1 - - [29/Mar/2016:13:29:12 +0000] "GET / HTTP/1.1" 404 27 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36"
project3-front_1 | 2016/03/29 13:29:12 [error] 8#8: *3 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 172.17.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://172.17.0.2:9000", host: "localhost"
这是我的 docker-compose:
project3-front:
image: nginx
ports:
- "80:80"
links:
- "project3-php:project3-php"
volumes:
- ".:/home/docker"
- "./nginxdir/default.conf:/etc/nginx/conf.d/default.conf"
- "./html:/usr/share/nginx/html"
project3-php:
build: phpdir
volumes:
- ".:/home/docker:rw"
- "./html:/var/www/html"
ports:
- "9000:9000"
working_dir: "/home/docker"
然后我的 dockerfile 用于 php:
FROM php:5.6-fpm
EXPOSE 9000
我的 nginx 的 default.conf:
server {
listen 80;
server_name localhost;
index index.php index.html;
error_log /var/log/nginx/error.log warn;
access_log /var/log/nginx/access.log;
root /usr/share/nginx/html;
location ~ \.php$ {
fastcgi_pass project3-php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
主文件夹的密码是:
/media/revenge/share/PROJECTS/docker_images/php7-nginx
文件层次结构是:
├── docker-compose.yml
├── html
│ ├── index.php
├── nginxdir
│ ├── default.conf
├── phpdir
│ ├── dockerfile
│ └── php.ini
整个文件夹是 chmod 777
任何想法将不胜感激。 我确定有些东西我没有得到。 提前致谢。
command
打开 nginx 调试模式,例如:docker-compose.yml
web:
image: nginx
volumes:
- "~/www/project:/var/www"
- "~/www/project/vhost.conf:/etc/nginx/conf.d/site.conf"
# Add this row:
command: [nginx-debug, '-g', 'daemon off;']
site.conf
”文件(在本例中它是~/www/project/vhost.conf
文件)通过error_log
打开调试模式(在末尾添加“debug”字样):error_log "/var/log/nginx/error.log" debug;
docker-compose stop web
docker-compose up -d web
docker-compose ps
/var/log/nginx/error.log
文件。你还没有设置或者你在web
和php-fpm
中使用不同的目录结构。 如果要使用与必须在fastcgi_param SCRIPT_FILENAME
位置设置“fpm 结构”不同的结构,如下所示:
如果您的 docker-compose.yml 包含如下内容:
phpfpm:
image: php:fpm
volumes:
- "~/www/project:/var/www/html/user/project"
# ^^^^^^^^^^^^^^^^^^^^^^^^^^ the path in the php-fpm container
您必须在nginx
容器中的“site.conf”中进行设置:
fastcgi_param SCRIPT_FILENAME /var/www/html/user/project$fastcgi_script_name;
# ^^^^^^^^^^^^^^^^^^^^^^^^^^
终于找到了:
我在 docker-compose 的 PHP 部分中缺少这一行:
“./html:/usr/share/nginx/html”
这是 docker-compose 的样子:
project3-front:
image: nginx
ports:
- "80:80"
links:
- "project3-php:project3-php"
volumes:
- ".:/home/docker"
- "./nginxdir/default.conf:/etc/nginx/conf.d/default.conf"
- "./html:/usr/share/nginx/html"
project3-php:
build: phpdir
volumes:
- ".:/home/docker:rw"
- "./html:/var/www/html"
ports:
- "9000:9000"
working_dir: "/home/docker"
nginx default.conf 文件中的绝对根目录(此处为“/usr/share/nginx/html”)也必须在 docker-compose 的 php 部分中设置(之前仅在 nginx 下)
这是一种解脱;)
在我的情况下,卷: php 和 nginx 指向正确(因此相同)的目录。 但是在我的 nginx 配置中有一个 NGINX_SERVER_ROOT: 指向错误的方式。
因此,请确保仔细检查所有卷和根目录设置。 有些很容易被忽视。
在替换$document_root$fastcgi_script_name;
通过/var/www/html/user/project$fastcgi_script_name;
可能会解决这个问题,我认为更优雅的方法是更改 default.conf 中的 nginx 根目录:
server {
listen 80;
server_name localhost;
index index.php index.html;
error_log /var/log/nginx/error.log warn;
access_log /var/log/nginx/access.log;
root /var/www/html;
location ~ \.php$ {
fastcgi_pass project3-php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
在 docker-compose.yml 中:
project3-front:
image: nginx
ports:
- "80:80"
links:
- "project3-php:project3-php"
volumes:
- ".:/home/docker"
- "./nginxdir/default.conf:/etc/nginx/conf.d/default.conf"
- "./html:/var/www/html"
昨天一个 Docker 更新命中- 已经安装。 取决于此更新的问题是, (vEthernet (DockerNAT))网络已更改。 这样我的防火墙(在我的例子中是卡巴斯基)将我的网络防火墙重置为“公共”而不是“可信”。
我通过打开“ Docker -> 设置 -> 共享设备”来解决这个问题。 乍一看,一切似乎都很好。 我需要共享的每台设备上都有一个“勾号”。 接下来,我尝试再次禁用和启用我的共享设备。 通过再次启用我的共享设备,默认错误“防火墙正在阻止 Windows 和容器之间的文件共享。有关详细信息,请参阅文档。” 上来了。 -> 完美!! . 共享设备无法再访问文件,但 Docker 仍然保持一切正常的状态。
所以我可以通过以下方式修复它:
docker-compose up
重新启动了我的 docker 容器,一切都像魅力一样运行。 我的文件可以再次访问。其中一种情况可能是,您运行 docker 容器并执行了 composer install/update
然后运行以下重新启动容器
`docker-compose down` `docker-compose up -d`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.