डॉकर कंटेनर के अंदर नग्नेक्स अन्य कंटेनरों से बात नहीं कर सकता (जेनकिंस चल रहा है)

मैं डॉकर के अंदर एक एनजीआईएनएक्स प्रॉक्सी स्थापित करने की कोशिश कर रहा हूं जो वेब ट्रैफ़िक के लिए सुनेगा और फिर वर्चुअलहोस्ट पर आधारित ट्रैफ़िक को अलग-अलग जेनकिंस उदाहरणों के आधार पर भी डॉकर कंटेनरों के अंदर चल रहा है । इसे ऑर्केस्ट्रेट करने के लिए मैं डॉकर-कंपोज़ का उपयोग करता हूं ।

मैं करने में कामयाब रहा:

  • जेनकिंस इंस्टेंस शुरू करें और उनसे सीधे बात करें
  • एनजीआईएनएक्स शुरू करें और इसे किसी अन्य होस्ट पर चलने वाले वेबसर्वर के लिए प्रॉक्सी के रूप में कार्य करने के लिए कॉन्फ़िगर करें

लेकिन जब मैं एनजीआईएनएक्स सर्वर को डॉकर के अंदर यातायात को रूट करने की कोशिश करता हूं तो मैं इसे काम करने के लिए प्राप्त नहीं कर सकता, बस 502-बैग गेटवे त्रुटियां और एनजीआईएनएक्स लॉग में फॉलिंग प्राप्त कर रहा हूं:

[error] 6#6: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.17.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8081/", host: "localhost:8080"

मेरे डॉकर-रचना के प्रासंगिक भाग । yml:

httpd:  build: httpd  ports:      - "8080:8080"  links:      - "server_jenkins"      - "clients_jenkins"  restart: alwaysserver_jenkins:  image: jenkins  ports:      - "8081:8080"  restart: alwaysclients_jenkins:  image: jenkins  ports:      - "8082:8080"  restart: always

Httpd/Dockerfile इस तरह दिखता है:

FROM nginxRUN rm -rf /etc/nginxCOPY config /etc/nginx/

और प्रासंगिक भागों के nginx.कॉन्फ इस तरह दिखता है (केवल एक जेनकिंस उदाहरण को प्रॉक्सी कर रहा है):

http {    server {        listen       8080;        server_name server.build.example.com;        root /tmp;        location / {            proxy_pass   http://127.0.0.1:8081;        }    }    server {        listen       8080;        server_name clients.build.example.com;        root /tmp;        location / {            proxy_pass   http://127.0.0.1:8082;        }    }}

मैंने पहले प्रॉक्सी_पास यूआरएल के निम्नलिखित वेरिएंट की कोशिश की है (और कुछ अन्य जो मुझे याद नहीं हैं):

  • http://server_jenkins:8081
  • http://172.18.0.3:8081 (आईपी-नंबर सर्वर_जेनकिन्स को सौंपा गया है जब साथ चल रहा है --एक्स-नेटवर्किंग)

जब साथ चल रहा है --एक्स-नेटवर्किंग मैंने डॉकर-कंपोज़ में कंटेनर_नाम के लिंक स्टेटमेंट को बदल दिया । yml

Versions:

  • डॉकर: 1.9.1, ए 34 ए 1 डी 5 बनाएं
  • डॉकर-कंपोज़: 1.5.2, बिल्ड 7240 एफएफ 3
  • ओएस: डेबियन 8 (वर्चुअलबॉक्स के अंदर चल रहा है)

मैं अपना पिछला उत्तर हटा रहा हूं क्योंकि मैं कुछ अलग जवाब दे रहा था । मुझे आपकी समस्या मिली, इसकी http://127.0.0.1 और बंदरगाहों जो गलत है, 127.0.0.1 अंदर nginx के conf का मतलब httpd इस मामले में कंटेनर ही मेजबान नहीं है ।

यदि आप इसे फिर से परिभाषित करते हैं server_jenkins और clients_jenkins और प्रत्यय भी 8080 उन दोनों के लिए पोर्ट, तो यह काम करना चाहिए ।

server {    listen       8080;    server_name server.build.example.com;    root /tmp;    location / {        proxy_pass   http://server_jenkins:8080;    }}server {    listen       8080;    server_name clients.build.example.com;    root /tmp;    location / {        proxy_pass   http://clients_jenkins:8080;    }}

साथ ही, मैंने देखा कि एचटीटीपी निर्देश त्रुटियों का कारण बनता है, लेकिन जैसा कि आपने जो फ़ाइल प्रदान की है उसका उल्लेख केवल एक स्निपेट हो सकता है ।

समस्या मिली।मैं उलझन में था कि पोर्टमैपिंग कैसे काम करता है ।

काम config:डोकर रचना.yml:

httpd:  build: httpd  ports:      - "8080:8080"  links:      - "server_jenkins"      - "clients_jenkins"  restart: alwaysserver_jenkins:  image: jenkins  restart: alwaysclients_jenkins:  image: jenkins  restart: always

nginx.conf:

http {    server {        listen       8080;        server_name server.build.example.com;        root /tmp;        location / {            proxy_pass   http://server_jenkins:8080;        }    }    server {        listen       8080;        server_name clients.build.example.com;        root /tmp;        location / {            proxy_pass   http://client_jenkins:8080;        }    }}

यानी। बंदरगाहों की मैपिंग की कोई जरूरत नहीं है ।

जब मैं लोकलहोस्ट पर जाता हूं तो मुझे 502-खराब गेटवे मिलता है:8080