Linux/Fedora 与 NginX-Docker 和 IPV6 的问题

Linux/Fedora 与 NginX-Docker 和 IPV6 的问题

我正在尝试在 Fedora 38 Plasma KDE 上设置 Nginx-Docker(几乎全新安装)。 Nginx 可以很好地连接到在端口 3000 上本地运行的反应服务器(非 docker)。但是,Nginx 无法连接到本地运行的后端服务器(scala、http4s、非 docker)。我还有 2 个 postgres 实例在 docker 的端口 5433 和 5432 上运行,后端连接到这些端口。

docker exec -it nginx-proxy curl host.docker.internal:4001/graphiql.html
curl: (7) Failed to connect to host.docker.internal port 4001 after 0 ms: Couldn't connect to server

curl localhost:4001/graphiql.html
# successful response

docker exec -it nginx-proxy curl host.docker.internal:3000
# successful response

curl localhost:3000
# successful response

使用netstat时,我注意到后端服务器正在使用tcp6,而react-server则没有。 (Postgres 在 tcp 和 tcp6 上)。之所以tcp6脱颖而出,是因为我也遇到了 git 和 npm 的问题,这些问题通过强制它们使用ipv4.

我不知道我当前的问题是否tcp6相关,所以这可能是一个转移注意力的问题。如果它与 tcp6 相关,那么它似乎不是硬件,因为一切都在我的笔记本电脑上运行,这似乎是合乎逻辑的。

$ netstat -anp | grep -E ':3000|:4001|:5433|:5432'
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:3000            0.0.0.0:*               LISTEN      61886/node-18       
tcp        0      0 0.0.0.0:5433            0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:5432            0.0.0.0:*               LISTEN      -                   
tcp6       0      0 127.0.0.1:4001          :::*                    LISTEN      59873/java          
tcp6       0      0 :::5433                 :::*                    LISTEN      -                   
tcp6       0      0 :::5432                 :::*                    LISTEN      -      

我也许可以尝试弄清楚如何强制我的后端服务器在 IPV4 上运行,甚至将其 Docker 化,但如果可行,那可能只会延迟接下来的十几个随机意外 IPV6 问题。

Nginx docker-compose.yml

version: '3.7'

services:
  nginx:
    image: nginx:alpine
    container_name: nginx-proxy
    restart: always
    volumes:
      - ./html:/usr/share/nginx/html
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
      - ./nginx.conf:/etc/nginx/nginx.conf
    ports:
      - '80:80'
    extra_hosts:
      - "host.docker.internal:host-gateway"

nginx.conf

#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location /graphql {
            proxy_pass http://host.docker.internal:4001/graphql;
        }
        location /graphiql.html {
            proxy_pass http://host.docker.internal:4001/graphiql.html;
        }
        location / {
            proxy_pass http://host.docker.internal:3000;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }
}

相关内容