स्थानीय रूप से docker run के साथ डॉकर चलाते समय मैं कुछ तर्क देता हूं जैसे:

docker run -p 8080:80 -e "SERVICE_B_URL=somehost.co.uk" -d mynginx:latest /bin/sh -c "envsubst '\${SERVICE_B_URL}' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"

यह ठीक काम करता है। मेरे /etc/nginx/conf.d/default.conf में स्ट्रिंग ${SERVICE_B_URL} को somehost.co.uk से बदल दिया गया है।

एडब्ल्यूएस फारगेट पर एक परिभाषा के साथ चलते समय:

"environment": [
        {
          "name": "SERVICE_B_URL",
          "value": "someotherhost.co.uk"
        }
      ],
"command": [
        "/bin/sh",
        "-c",
        "envsubst '\\${SERVICE_B_URL}' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"
      ],

\\ को JSON फ़ाइल में \ से बचना था।

चलाने का प्रयास करते समय, कंटेनर एक त्रुटि के साथ बाहर निकलता है क्योंकि NGINX शाब्दिक स्ट्रिंग ${SERVICE_B_URL} देख रहा है। जब मैं कंटेनर का निरीक्षण करता हूं और कंटेनर को शुरू करने के लिए उपयोग की जाने वाली कमांड AWS देखता हूं:

Command ["/bin/sh","-c","envsubst '\\' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"]

ध्यान दें कि फ़ार्गेट ने स्ट्रिंग '\\${SERVICE_B_URL}' को डॉकर रन के लिए एक कमांड के रूप में आपूर्ति करने से पहले विस्तार करने का प्रयास किया है। मेरा इरादा यह निर्दिष्ट करना है कि एक शाब्दिक स्ट्रिंग के रूप में।

क्या इससे बचने/विस्तार को रोकने का कोई तरीका है। मैंने '\\\\${SERVICE_B_URL}' -> '\\' जैसी चीजों की कोशिश की है।


फुटनोट, यदि आप सोच रहे हैं कि मैं केवल उपयोग करने के बजाय '\${SERVICE_B_URL}' से envsubst क्यों निर्दिष्ट करता हूं:

docker run -p 8080:80 -e "SERVICE_B_URL=somehost.co.uk" -d mynginx:latest /bin/sh -c "envsubst < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"

इसका कारण यह है कि प्रतिस्थापित की जा रही फ़ाइल में अन्य एनजीआईएनएक्स कॉन्फ़िगरेशन शामिल है जो $ सिंटैक्स के साथ चर का उपयोग करता है। इसलिए इन्हें envsubst द्वारा प्रतिस्थापित किए जाने से रोकने के लिए मैं स्पष्ट रूप से उस चर का नाम देता हूं जिसे मैं बदलना चाहता हूं। डॉकर रन के साथ स्थानीय रूप से चल रहा है, यह एक आकर्षण की तरह काम करता है ...

0
David 25 फरवरी 2019, 01:51

1 उत्तर

सबसे बढ़िया उत्तर

मैंने यह आदेश देकर इसे सरल बना दिया है कि हम docker run Dockerfile के हिस्से को CMD का उपयोग करके पास करेंगे, उदाहरण:

CMD ["/bin/sh","-c","envsubst '\\${SERVICE_B_URL}' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"]

अब हम Fargate के लिए JSON फ़ाइल से command कॉन्फ़िगरेशन को हटा सकते हैं।

0
David 25 फरवरी 2019, 13:37