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:8080172.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 网络内可用,因此您无法通过这种方式访问​​容器。