Docker 对于 Windows。无法连接到 nginx
Docker for Windows. Cannot connect to nginx
使用 Windows 10 和 Docker,我试图访问我的 Linux 容器 运行 nginx。我试图通过网络浏览器访问我的本地主机(或通过 IP 地址),我得到 "cannot reach this page"。在我的 nginx 容器中,如果我尝试使用 CURL 访问本地主机或直接 ip,我会得到 "Connection Refused"。我是 docker 和 Windows 的完全初学者,弄清楚它是一场噩梦!已尝试 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 文件?
非常感谢!
刚刚测试了您的设置,对我来说效果很好。
由于您已经从浏览器中获得 "cannot reach this page",问题已经出现在 nginx 中,而不是 php 容器中。当 php 容器不工作时,页面将加载并给你一个像 "Cannot find file"(例如 index.php)或类似的 nginx 错误。
你能检查一下 nginx 配置是否正确加载到容器中吗?为此,键入 "docker exec -it sh" 并导航至 /etc/nginx/conf.d/default.conf 文件
补充信息
您无法通过 172.18.0.4:8080 访问 nginx 容器。这是容器的 ip,但你只将端口 8080 映射到你的主机。 nginx 容器的默认端口是 80。由于 "normal" 容器端口仅在 docker 网络内可用,因此您无法通过这种方式访问容器。
使用 Windows 10 和 Docker,我试图访问我的 Linux 容器 运行 nginx。我试图通过网络浏览器访问我的本地主机(或通过 IP 地址),我得到 "cannot reach this page"。在我的 nginx 容器中,如果我尝试使用 CURL 访问本地主机或直接 ip,我会得到 "Connection Refused"。我是 docker 和 Windows 的完全初学者,弄清楚它是一场噩梦!已尝试 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 文件?
非常感谢!
刚刚测试了您的设置,对我来说效果很好。
由于您已经从浏览器中获得 "cannot reach this page",问题已经出现在 nginx 中,而不是 php 容器中。当 php 容器不工作时,页面将加载并给你一个像 "Cannot find file"(例如 index.php)或类似的 nginx 错误。
你能检查一下 nginx 配置是否正确加载到容器中吗?为此,键入 "docker exec -it sh" 并导航至 /etc/nginx/conf.d/default.conf 文件
补充信息
您无法通过 172.18.0.4:8080 访问 nginx 容器。这是容器的 ip,但你只将端口 8080 映射到你的主机。 nginx 容器的默认端口是 80。由于 "normal" 容器端口仅在 docker 网络内可用,因此您无法通过这种方式访问容器。