windows - 适用于 Windows 的 Docker。无法连接到 nginx
问题描述
使用带有 Docker 的 Windows 10,我正在尝试访问运行 nginx 的 Linux 容器。我正在尝试通过网络浏览器访问我的本地主机(或通过 IP 地址),但我得到“无法访问此页面”。在我的 nginx 容器中,如果我尝试使用 CURL 访问 localhost 或直接 ip,我会得到“连接被拒绝”。我是使用 Windows 进行 docker 的完全初学者,而这简直就是一场噩梦!已经尝试过localhost:8080
(172.18.0.4:8080
这是 docker inspect nginx_1 中显示的 IP)
这是我的 docker-compose.yml
version: '2'
volumes:
database_data:
driver: local
services:
nginx:
image: nginx:latest
ports:
- 8080:80
volumes:
- ./docker/nginx/default.conf:/etc/nginx/conf.d
volumes_from:
- php
php:
build: ./docker/php
expose:
- 9000
volumes:
- .:/var/www/html
mysql:
image: mysql:latest
expose:
- 3306
volumes:
- database_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: project
MYSQL_USER: project
MYSQL_PASSWORD: project
这是我的 nginx default.conf 文件:
server {
listen 80 default_server;
root /var/www/html/public;
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
sendfile off;
client_max_body_size 100m;
location ~ \.php$ {
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 APPLICATION_ENV development;
fastcgi_intercept_errors off;
fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
}
location ~ /\.ht {
deny all;
}
}
我的配置中缺少什么阻止我从主机访问我的 index.php 文件?
非常感谢!
解决方案
刚刚测试了你的设置,对我来说效果很好。
由于您已经从浏览器中获得“无法访问此页面”,因此问题已经存在于 nginx 中,而不是 php 容器中。当 php 容器不工作时,页面将加载并给你一个 nginx 错误,如“找不到文件”(例如 index.php)或类似的。
你能检查一下 nginx 配置是否正确加载到容器中吗?为此,请键入“docker exec -it sh”并导航到 /etc/nginx/conf.d/default.conf 文件
附加信息
您无法通过 172.18.0.4:8080 访问 nginx 容器。这是容器的 ip,但您仅将端口 8080 映射到您的主机。nginx 容器的默认端口是 80。由于“普通”容器端口仅在 docker 网络内部可用,因此您无法通过这种方式访问容器。
推荐阅读
- excel - 如何根据组合框选择在文本框上显示文本
- ethereum - 通过 new 创建实例时调用方法在另一个合约中失败
- python - 在 Python 中创建和使用图像缩略图
- regex - 使用正则表达式根据包含反斜杠的字段值查询文档
- database - 如何在 Firebase 实时数据库上建模聊天应用程序?
- powershell - 使用 PS:如何强制删除文件而不发送到回收站?
- php - 即使我提供访问令牌,GitHub API 返回消息也需要身份验证
- azure - Dynamics 365/Microsoft.ServiceBus DLL - System.Security.SecurityException:该程序集不允许部分受信任的调用者
- testing - 为什么golang测试包在报告测试失败时会用下划线替换空格?
- angular - 如何在 angular5 服务中创建具有泛型类型的新实例