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). 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에서 실행하거나 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;
}
}
}