การใช้ nginx กับ reverse proxy ใน container docker ไม่ทำงาน


2

ฉันต้องการให้ทุกสิ่งที่เริ่มต้นด้วย/apiถูกนำไปhttp://localhost:3007

นี่คือ nginx.conf ของฉัน

user nginx;
worker_processes  1;

daemon off;

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 / {
            root   /usr/html;
            index  index.html index.htm;
        }

        location /api {
            proxy_pass http://localhost:3007;
            proxy_read_timeout 5m;
        }

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

มันทำงานได้เมื่อฉันเรียกใช้ในเครื่องบน mac ของฉัน แต่มันไม่ทำงานเมื่อฉันรันมันใน docker-container

นี่คือไฟล์นักเทียบท่าของฉัน:

FROM smebberson/alpine-nginx:latest
COPY /dist /usr/html/
COPY nginx.conf /etc/nginx/nginx.conf

นี่คือนักแต่งเพลงของฉัน:

version: "2"
services:
  web:
    build: .
    ports:
     - "80:80"

ข้อผิดพลาดที่ฉันได้รับจาก nginx:

2017/06/28 13:06:51 [error] 200#0: *9 connect() failed (111: Connection refused) while connecting to upstream, client: 172.19.0.1, server: localhost, request: "GET /api HTTP/1.1", upstream: "http://127.0.0.1:3007/api", host: "localhost"

ดังนั้นคุณต้องการรัน nginx ใน container docker หรือไม่?
P0pR0cK5

@JulienGuerder ใช่ ฉันเป็น Express-API ของฉันในที่เก็บหนึ่งแห่งและ nginx ที่ให้บริการเนื้อหาคงที่ในที่เก็บอื่น
Joe

คุณต้องใช้ฟังก์ชั่นเครือข่ายนักเทียบท่าเพื่อเชื่อมต่อทุกอย่างเข้าด้วยกัน ดูลิงค์นี้มันอธิบายวิธีการใช้เครือข่ายนักเทียบท่ากับตัวอย่าง dasblinkenlichten.com/docker-networking-101-host-mode
P0pR0cK5

ดูเหมือนจะหนัก มีความเชื่อมั่นมากมายที่จะทำให้เรื่องนี้ดำเนินไปได้?
Joe

ไม่จริงๆคุณต้องเข้าใจว่า nework ทำงานอย่างไร
P0pR0cK5

คำตอบ:


1

ส่วนใหญ่แล้วคุณไม่ต้องการlocalhost:3007แต่อย่างอื่นapi-upstream-server:3007- คอนเทนเนอร์แยกต่างหากที่รันโค้ดเซิร์ฟเวอร์แอปและเปิดเผยพอร์ต 3007

ข้างในตู้คอนเทนเนอร์localhostเป็นตู้คอนเทนเนอร์ไม่ใช่เครื่องโฮสต์ นักเทียบท่าแยกภาชนะออกจากโหนดโฮสต์

แต่แจ้งให้ทราบล่วงหน้าคุณอาจจะต้องทำงานทุกอย่างอื่น (ฐานข้อมูลและอื่น ๆ ) ในคอนเทนเนอร์นักเทียบท่าเช่นกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.