डॉकर के साथ आईपीटीबल्स पोर्ट पुनर्निर्देशन का उपयोग करना

मेरे पास जेनकींस (पोर्ट 8080 पर एचटीटीपी) चलाने वाला एक लिनक्स सर्वर है और वही सर्वर डॉकर 1.12.1 भी चला रहा है । मैंने पोर्ट 8080 को होस्ट के पोर्ट 80 पर पुनर्निर्देशित करने के लिए कुछ आईपीटेबल्स नियमों (आधिकारिक जेनकिंस इंस्टॉल डॉक्स के अनुसार) का उपयोग किया, ताकि डिफ़ॉल्ट एचटीटीपी जेनकिंस (यानी) के लिए काम करे http://myserver बजाय http://myserver:8080):

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080

हालांकि ये नियम डॉकर की एचटीटीपी के माध्यम से सही संसाधनों को डाउनलोड करने की क्षमता को तोड़ते हैं docker build कमान। उदाहरण के लिए, RUN apt-get update एकाधिक "डाउनलोड करने में विफल" त्रुटियों के साथ विफल रहता है । कर रही है wget http://www.google.com कंटेनर के अंदर जेनकींस मुख्य पृष्ठ के लिए एचटीएमएल देता है । एचटीटीपी मेजबान काम से ठीक हो जाता है । आईपीटीबल्स नियमों को हटाने के परिणामस्वरूप RUN apt-get update फिर से काम करना। इसलिए मुझे लगता है कि वे आईपीटीबल्स नियम डॉकर के नेटवर्क तंत्र में हस्तक्षेप कर रहे हैं ।

क्या ऐसा पोर्ट पुनर्निर्देशन डॉकर के साथ सह-अस्तित्व में हो सकता है? यदि हां, तो इस समस्या को हल करने के लिए आईपीटीबल्स नियम लिखने के बारे में कोई कैसे जाएगा?

आईपीटीबल्स नियमों में एक संभावित संशोधन दोनों को हटाने और प्रतिस्थापित करने के लिए है:

iptables -t nat -A PREROUTING -p tcp -m tcp -i eth0 --dport 80 -j REDIRECT --to-ports 8080

यह सुनिश्चित करेगा कि, मेरे मामले के लिए, पोर्ट 80 पर केवल टीसीपी ट्रैफ़िक इंटरफ़ेस के माध्यम से eth0 पुनर्निर्देशित किया जाएगा । होस्ट पर डॉकर कंटेनर से निकलने वाले ट्रैफ़िक को पुनर्निर्देशित नहीं किया जाएगा । ध्यान दें कि मैंने लोकलहोस्ट पुनर्निर्देशन को भी छोड़ दिया है, हालांकि संभवतः इंटरफ़ेस से उत्पन्न होने वाली किसी भी चीज़ को फ़िल्टर करने से बचने के लिए इसे संशोधित किया जा सकता है docker0.

एक अन्य समाधान टीसीपी पोर्ट 80 पर आने वाले एचटीटीपी अनुरोधों को होस्ट के पोर्ट 8080 पर अग्रेषित करने के लिए रिवर्स प्रॉक्सी को नियोजित करना है । मैंने इस्तेमाल किया कैडी के साथ निम्नलिखित सरल Caddyfile:

localhost:80proxy / localhost:8080

के साथ इस जगह में, मैं दूर कर सकते हैं iptables के नियमों का पूरी तरह से.

यह पोर्ट 80 पर एक सरल पुनर्निर्देशन प्रदान करता है, साथ ही डॉकर कंटेनरों को सामान्य रूप से आउटगोइंग एचटीटीपी का उपयोग करने की अनुमति देता है ।