Linux/Fedora, NginX-Docker 및 IPV6 관련 문제

Linux/Fedora, NginX-Docker 및 IPV6 관련 문제

Fedora 38 Plasma KDE(거의 새로 설치)에서 Nginx-Docker를 설정하려고 합니다. Nginx는 포트 3000에서 로컬로 실행되는 반응 서버(비도커)에 연결하여 잘 작동합니다. 그러나 Nginx는 로컬로 실행되는 백엔드 서버(scala, http4s, non-docker)에 연결할 수 없습니다. 또한 포트 5433 및 5432의 docker에서 2개의 postgres 인스턴스가 실행되고 있으며 백엔드가 이 포트에 연결되어 있습니다.

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는 사용하지 않는 것을 확인했습니다. (tcp 및 tcp6의 Postgres). tcp6git 및 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에서 실행하거나 Dockerize하는 방법을 알아내려고 노력할 수도 있지만 이것이 작동한다면 아마도 다음 12개의 예상치 못한 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;
        }

    }
}

관련 정보