2016-11-15 9 views
17

मैं एक YAML अदिश कि निम्न त्रुटि फेंक रहा है जब मैं अपने docker-compose.yml फ़ाइल का मूल्यांकन करने की कोशिश की है:

ERROR: Invalid interpolation format for "environment" option in service "time_service": "${Time.now}"

YAML:

--- 
version: '2' 
services: 
    time_service: 
    build: "." 
    environment: 
     TIME: "${Time.now}" 

मैं एक ही स्ट्रिंग उत्पादन लिखित रूप में कैसे बनाए रख सकते हैं, लेकिन डॉकर-कंपोज़ को दोषपूर्ण स्ट्रिंग इंटरपोलेशन के रूप में समझने से बचें?

+0

यह वाईएएमएल पार्सर नहीं है जो उस स्ट्रिंग को समझ रहा है। वाईएएमएल को '$ {}' के बारे में पता नहीं है। व्याख्या 'डॉकर-कंपोज़' द्वारा की जाती है और यह पायथन में लिखी जाती है, इसलिए टैग रूबी भी अनुचित था। – Anthon

+0

मैंने गलत धारणा को हटा दिया कि यह एक वाईएएमएल मुद्दा है। इसने कम से कम एक अन्य व्यक्ति को [गुमराह करने और बर्बाद करने के लिए] का कारण बनता है (https://stackoverflow.com/questions/45312806/how-to-escape-a-sign-in-an-ansible-host-vars-file) – Anthon

उत्तर

27

आप docker-compose चर substition है, जो अच्छी तरह से प्रलेखित है here मार रहे हैं करने के लिए मूल्यांकन करता है,:,

Both $VARIABLE and ${VARIABLE} syntax are supported. Extended shell-style features, such as ${VARIABLE-default} and ${VARIABLE/foo/bar}, are not supported.

You can use a $$ (double-dollar sign) when your configuration needs a literal dollar sign. This also prevents Compose from interpolating a value, so a $$ allows you to refer to environment variables that you don’t want processed by Compose.

docker-compose पायथन में लिखा है, जैसा कि आप github पर देखते हैं विशेष पात्रों का मूल अर्थ प्राप्त करने के लिए दोगुनी तंत्र कई कार्यक्रमों में पाया जा सकता है, मुझे 1 9 84 में प्रोग्रामिंग के दौरान इसे स्वयं उपयोग करने की आवश्यकता थी।

9

this post

में % पात्रों के लिए सुझाव को कॉपी यह एक डबल डॉलर साइन $$ की आवश्यकता है द्वारा जवाब मिले।

तो मैं "$${Time.now}" की जरूरत है जो "${Time.now}"

संबंधित मुद्दे