英文:
I am getting a localhost didn’t send any data error
问题
我是一个Docker新手,但我想尝试在我的现有Laravel项目中使用它。
请注意,我这里的东西只是从互联网上不同来源的学习中获取的。
首先,我可以使用以下的docker-compose.yml文件来启动nginx和php-fpm:
version: "3"
services:
web:
build: .
volumes:
- D:\code\project:/usr/share/nginx/html
ports:
- "80:80"
php:
image: php:7.1-fpm
volumes:
- D:\code\project:/usr/share/nginx/html
ports:
- "9000:9000"
Dockerfile:
FROM nginx:mainline-alpine
WORKDIR D:\code\project
COPY ./default.conf /etc/nginx/conf.d/default.conf
./default.conf:
server {
listen 80;
root /usr/share/nginx/html/public;
index index.php index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ ^/.+\.php(/|$) {
fastcgi_pass php:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
http://localhost/phpinfo.php的结果:
http://localhost的结果:
但是,正如你所看到的,我需要laravel所需的PHP PDO扩展/驱动程序。
因此,我尝试通过Dockerfile安装所需的PHP扩展,并遇到了“localhost没有发送任何数据错误”的问题。
docker-compose.yml:
version: "3"
services:
web:
build: .
volumes:
- D:\code\project:/usr/share/nginx/html
ports:
- "80:80"
php:
build: .
volumes:
- D:\code\project:/usr/share/nginx/html
ports:
- "9000:9000"
Dockerfile:
FROM nginx:mainline-alpine
WORKDIR D:\code\project
COPY ./default.conf /etc/nginx/conf.d/default.conf
FROM php:7.1-fpm
RUN docker-php-ext-install pdo pdo_mysql
./default.conf - 没有更改,与上面相同。
http://localhost/phpinfo.php的结果:
http://localhost的结果:
容器已经启动并运行:
我是否漏掉了什么?我不知道如何使用Docker进行调试,也不知道在哪里查看日志或错误。
我已经被困扰了3天。有人能帮忙吗?
英文:
I am a newbie with docker but I want to try it so I can use it with my existing laravel project.
Please note that the things I have here are just from different sources of learning from the internet.
For starters, I can have nginx and php-fpm up and running with this docker-compose.yml
version: "3"
services:
web:
build: .
volumes:
- D:\code\project:/usr/share/nginx/html
ports:
- "80:80"
php:
image: php:7.1-fpm
volumes:
- D:\code\project:/usr/share/nginx/html
ports:
- "9000:9000"
Dockerfile:
FROM nginx:mainline-alpine
WORKDIR D:\code\project
COPY ./default.conf /etc/nginx/conf.d/default.conf
./default.conf
server {
# The port to listen on
listen 80;
# The root directory, which must exactly match the internal volume share
root /usr/share/nginx/html/public;
index index.php index.html index.htm index.nginx-debian.html;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ /index.php?$query_string;
}
# For all files with the PHP extension run the following
location ~ ^/.+\.php(/|$) {
# Pass the request to the host "php" and port 9000 (default PHP-FPM port).
# The "php" host name is generated from the application name in the
# Docker Compose file that was previously defined.
fastcgi_pass php:9000;
# Include the default NGINX FastCGI Parameters
include fastcgi_params;
# Define one additional parameter telling PHP-FPM where to find the file
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
The result in http://localhost/phpinfo.php:
The result in http://localhost
But as you can see, I need the PHP PDO extension/driver for laravel.
So, I am trying to install said PHP extension thru the Dockerfile and I am stucked with the issue "localhost didn’t send any data error"
docker-compose.yml
version: "3"
services:
web:
build: .
volumes:
- D:\code\project:/usr/share/nginx/html
ports:
- "80:80"
php:
build: .
volumes:
- D:\code\project:/usr/share/nginx/html
ports:
- "9000:9000"
Dockerfile
FROM nginx:mainline-alpine
WORKDIR D:\code\project
COPY ./default.conf /etc/nginx/conf.d/default.conf
FROM php:7.1-fpm
RUN docker-php-ext-install pdo pdo_mysql
./default.conf - same as above, no changes
The result in http://localhost/phpinfo.php:
http://localhost:
The containers are up and running:
Am I missing something? I do not know how to debug with docker or where to view logs or errors.
I have been stucked with this for 3 days. Can someone please help?
答案1
得分: 1
我终于成功解决了它。
我所做的是将Dockerfile拆分为两个部分,分别放在不同的子文件夹中,一个用于nginx,另一个用于php。
./nginx/Dockerfile
FROM nginx:mainline-alpine
WORKDIR D:\code\project
COPY ./default.conf /etc/nginx/conf.d/default.conf
./php/Dockerfile
FROM php:7.1-fpm
RUN docker-php-ext-install pdo pdo_mysql
我还更新了docker-compose.yml文件以反映两个Dockerfile的路径。
version: "3"
services:
web:
build: ./nginx
volumes:
- D:\code\project:/usr/share/nginx/html
ports:
- "80:80"
php:
build: ./php
volumes:
- D:\code\project:/usr/share/nginx/html
ports:
- "9000:9000"
英文:
I finally managed to solve it.
What I did was to split the Dockerfile into two, putting it inside separate sub-folders, one for nginx and one for php.
./nginx/Dockerfile
FROM nginx:mainline-alpine
WORKDIR D:\code\project
COPY ./default.conf /etc/nginx/conf.d/default.conf
./php/Dockerfile
FROM php:7.1-fpm
RUN docker-php-ext-install pdo pdo_mysql
And I also updated the docker-compose.yml to reflect the path of both Dockerfiles
version: "3"
services:
web:
build: ./nginx
volumes:
- D:\code\project:/usr/share/nginx/html
ports:
- "80:80"
php:
build: ./php
volumes:
- D:\code\project:/usr/share/nginx/html
ports:
- "9000:9000"
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论