首页 > 解决方案 > 适用于 Windows 的 Docker。无法连接到 nginx

问题描述

使用带有 Docker 的 Windows 10,我正在尝试访问运行 nginx 的 Linux 容器。我正在尝试通过网络浏览器访问我的本地主机(或通过 IP 地址),但我得到“无法访问此页面”。在我的 nginx 容器中,如果我尝试使用 CURL 访问 localhost 或直接 ip,我会得到“连接被拒绝”。我是使用 Windows 进行 docker 的完全初学者,而这简直就是一场噩梦!已经尝试过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 文件?

非常感谢!

标签: windowsdockernginxfpm

解决方案


刚刚测试了你的设置,对我来说效果很好。

由于您已经从浏览器中获得“无法访问此页面”,因此问题已经存在于 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 网络内部可用,因此您无法通过这种方式访问​​容器。


推荐阅读