Як мені уникнути знака долара в файлі складання докера?


91

У мене є скаляр YAML, який видає таку помилку під час спроби оцінити свій docker-compose.ymlфайл:

ПОМИЛКА: Недійсний формат інтерполяції для параметра "середовище" в службі "time_service": "$ {Time.now}"

YAML:

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

Як я можу підтримувати той самий вихідний рядок, що і написаний, але уникати того, щоб компонент docker-compose інтерпретував його як неправильну інтерполяцію рядків?


1
Не парсер YAML інтерпретує цей рядок. YAML не знає про ${}. Інтерпретація виконується docker-composeі пишеться на Python, тому тег ruby ​​також був невідповідним.
Антон

Я видалив неправильне припущення, що це проблема YAML. Це призвело до того, що принаймні ще одна людина потрапила в оману і втратила час
Ентон

Відповіді:


132

Ви можете використовувати $$(знак подвійного долара), коли вашій конфігурації потрібен буквальний знак долара.

Ви вдаряє docker-composeзмінну substition, яка добре документована тут :

Підтримуються обидва $VARIABLEта ${VARIABLE}синтаксис. Розширені функції в стилі оболонки, такі як ${VARIABLE-default}і ${VARIABLE/foo/bar}, не підтримуються.

Ви можете використовувати $$(знак подвійного долара), коли вашій конфігурації потрібен буквальний знак долара. Це також заважає Compose інтерполювати значення, тому a $$дозволяє посилатися на змінні середовища, які ви не хочете обробляти Compose.

docker-composeнаписано на Python, як ви бачите на github , механізм подвоєння, щоб отримати початкове значення спеціальних символів, можна знайти в багатьох програмах, мені потрібно було це використовувати самостійно під час програмування ще в 1984 році.


38

Знайшов відповідь, скопіювавши пропозицію щодо %символів у цій публікації

Для цього потрібен знак подвійного долара $$.

Так мені було потрібно "$${Time.now}", що оцінює"${Time.now}"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.