स्थानीय रूप से 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
द्वारा प्रतिस्थापित किए जाने से रोकने के लिए मैं स्पष्ट रूप से उस चर का नाम देता हूं जिसे मैं बदलना चाहता हूं। डॉकर रन के साथ स्थानीय रूप से चल रहा है, यह एक आकर्षण की तरह काम करता है ...
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
कॉन्फ़िगरेशन को हटा सकते हैं।
संबंधित सवाल
नए सवाल
amazon-ecs
अमेज़ॅन इलास्टिक कंटेनर सर्विस (ECS) एक अत्यधिक स्केलेबल, उच्च प्रदर्शन कंटेनर प्रबंधन सेवा है जो डॉकर कंटेनरों का समर्थन करती है और आपको अमेज़ॅन EC2 इंस्टेंस के प्रबंधित क्लस्टर पर वितरित अनुप्रयोगों को आसानी से चलाने की अनुमति देती है।