我尝试了一个非常小的设置,以对Laravel应用进行dockerize。即使nginx能够将请求转发到Laravel容器,我仍然GET /index.php" 404
C:\yocto\snapweb>docker-compose logs --follow laravel
Attaching to snapweb_laravel_1
laravel_1 | [23-Jul-2018 07:10:04] NOTICE: fpm is running, pid 1
laravel_1 | [23-Jul-2018 07:10:04] NOTICE: ready to handle connections
laravel_1 | 172.18.0.3 - 23/Jul/2018:07:14:01 +0000 "GET /index.php" 404
当我进入laravel容器时,它是这样的。对我来说似乎很好。
/var/www/html # pwd
/var/www/html
/var/www/html # ls -al
total 224
drwxr-xr-x 1 root root 4096 Jul 23 07:09 .
drwxr-xr-x 1 root root 4096 Jul 21 08:11 ..
-rwxr-xr-x 1 root root 668 Jul 23 07:08 Dockerfile
drwxr-xr-x 6 root root 4096 May 8 19:42 app
-rwxr-xr-x 1 root root 1686 May 8 19:42 artisan
drwxr-xr-x 3 root root 4096 May 8 19:42 bootstrap
-rw-r--r-- 1 root root 1477 May 8 19:42 composer.json
-rw-r--r-- 1 root root 144199 Jul 23 07:03 composer.lock
drwxr-xr-x 2 root root 4096 May 8 19:42 config
drwxr-xr-x 5 root root 4096 May 8 19:42 database
-rw-r--r-- 1 root root 1022 May 8 19:42 package.json
-rw-r--r-- 1 root root 1134 May 8 19:42 phpunit.xml
drwxr-xr-x 4 root root 4096 May 8 19:42 public
-rw-r--r-- 1 root root 3675 May 8 19:42 readme.md
drwxr-xr-x 5 root root 4096 May 8 19:42 resources
drwxr-xr-x 2 root root 4096 May 8 19:42 routes
-rw-r--r-- 1 root root 563 May 8 19:42 server.php
drwxr-xr-x 5 root root 4096 May 8 19:42 storage
drwxr-xr-x 4 root root 4096 May 8 19:42 tests
drwxr-xr-x 37 root root 4096 Jul 23 07:03 vendor
-rw-r--r-- 1 root root 549 May 8 19:42 webpack.mix.js
/var/www/html # ls -al public
total 32
drwxr-xr-x 4 root root 4096 May 8 19:42 .
drwxr-xr-x 1 root root 4096 Jul 23 07:09 ..
-rw-r--r-- 1 root root 593 May 8 19:42 .htaccess
drwxr-xr-x 2 root root 4096 May 8 19:42 css
-rw-r--r-- 1 root root 0 May 8 19:42 favicon.ico
-rw-r--r-- 1 root root 1823 May 8 19:42 index.php
drwxr-xr-x 2 root root 4096 May 8 19:42 js
-rw-r--r-- 1 root root 24 May 8 19:42 robots.txt
-rw-r--r-- 1 root root 914 May 8 19:42 web.config
/var/www/html #
我可以知道我的设置有什么问题吗?这是我的简约Dockerfile
FROM php:7.2.8-fpm-alpine3.7
RUN apk update && \
apk add git && \
apk add unzip
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Get laravel into a temporary folder.
RUN composer create-project --prefer-dist laravel/laravel laravel-install-tmp
# Move local host files to docker container.
COPY . /var/www/html
# Copy all laravel files, without overwrite files from host.
RUN false | cp -ai /var/www/html/laravel-install-tmp/* /var/www/html/ 2>/dev/null
# Remove temporary folder.
RUN rm -rf /var/www/html/laravel-install-tmp/
WORKDIR /var/www/html
CMD ["php-fpm", "-F"]
server {
listen 443;
ssl on;
ssl_certificate /app/cert.pem;
ssl_certificate_key /app/key.pem;
location / {
try_files $uri /index.php?$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass laravel:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
FROM nginx:1.13.9-alpine
COPY . /app
RUN rm /etc/nginx/conf.d/default.conf
COPY default.conf /etc/nginx/conf.d/
version: '2'
services:
# Note, SSL cert (cert.pem and key.pem) is generated from cloudflare.
nginx:
build:
context: ./nginx
dockerfile: Dockerfile
restart: always
ports:
- "2053:443"
laravel:
build:
context: ./laravel
dockerfile: Dockerfile
restart: always
我认为您缺少 php-fpm.conf 配置文件,我的文件看起来像是标准文件,但有一些更改:
error_log = /proc/self/fd/2
允许您使用 docker logs
daemonize = no
include=/etc/php/7.1/fpm/php-fpm.d/www.conf
www.conf
我将其包含在 php-fpm.conf
更改标准之一:
listen = 9000
Dockerfile
:
显然,我复制了php-fpm.conf和www.conf(我使用php:7.1.14-fpm-jessie
)
... install & cleanup steps
COPY php-fpm.conf /etc/php/7.1/fpm/php-fpm.conf
COPY www.conf /etc/php/7.1/fpm/php-fpm.d/www.conf
用于php-fpm的Dockerfile的结尾看起来像:
CMD ["php-fpm", "--fpm-config", "/etc/php/7.1/fpm/php-fpm.conf"]
default
我通过Dockerfile复制到其中:
server {
listen 80 default_server;
root /var/www/app/public;
index index.html index.htm index.php;
server_name _;
charset utf-8;
location = /favicon.ico { log_not_found off; access_log off; }
location = /robots.txt { log_not_found off; access_log off; }
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass pn-php-fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
error_page 404 /index.php;
location ~ /\.ht {
deny all;
}
}
NGINX的Dockerfile
:
FROM nginx
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
COPY default /etc/nginx/conf.d/default.conf
# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log
CMD ["nginx"]
撰写时需要共享音量;我的意思是,NGINX + php-fpm必须能够读取您的 应用程序代码
volumes:
- wherever/your/code/is/on/host:/var/www/app
注意 :此答案是WIP,我将定期编辑/评论以帮助OP。
问题内容: 我对php比较陌生。有一件非常基本的事情困扰着我。我了解php用于使网站动态化。我也了解php是可用于创建动态网站的许多服务器端脚本语言之一。 但是,我不明白的是,何时需要使用index.php页面。例如,如果我的索引页面上只有一个简单的登录页面,那么它也可能只是一个简单的html页面。对?那我为什么要使它成为index.php而不是index.html? 一个示例情况的例子将是很好的
问题内容: 我有一个简单的代码,可为文本文件(url_list.txt)中列出的每个URL打印GET响应时间。 当顺序触发请求时,返回的时间对应于各个URL的预期响应时间。 但是,当同时执行相同的代码时,返回的响应时间通常比预期的要高。 看来我在http.Get(url)调用之前捕获的 time_start 并不是实际发送请求的时间。我猜http.Get(url)的执行排队了一段时间。 使用gor
**>错误:请求失败,状态代码为404, 在createError(createError.js:16)在settle.js:17)在xmlHttpRequest.HandleLoad(xhr.js:62)**
问题内容: 我无法使用RestTemplate(org.springframework.web.client.RestTemplate)应对额外的弹簧行为,但没有成功。 我在代码下面的Hole应用程序中使用,并且始终会收到XML响应,该响应会解析并评估其结果。 但是无法确定为什么执行后服务器响应为JSON格式: 我已经在较低级别的RestTemplate上进行了调试,内容类型为XML,但是不知道为
我使用pysnmp用Python测试了SNMP GET命令的以下代码 当我使用localhost或127.0.0.1运行它时,它可以工作,但当我使用计算机的IP时,会出现超时错误。 我还测试了我在Java(snmp4j)中找到的一个示例,它与Java(snmp4j)是一样的:它可以与本地主机和127.0.0.1一起工作,但不能与IP一起工作。如果我对IP进行ping,它就会工作,所以我不明白为什么
问题内容: 我刚刚安装了CentOS,Apache和PHP。当我访问我的网站http://example.com/myapp/时,它显示为“禁止访问”。默认情况下,它不会加载index.php文件。 当我访问http://example.com/myapp/index.php时,它可以正常工作。 任何想法如何解决该问题? 问题答案: Apache需要配置为将index.php识别为索引文件。 实现