¿Cómo puedo escapar de un signo de dólar $ en un archivo de redacción de Docker?

90

Tengo un escalar YAML que arroja el siguiente error cuando intento evaluar mi docker-compose.ymlarchivo:

ERROR: formato de interpolación no válido para la opción "entorno" en el servicio "time_service": "$ {Time.now}"

YAML:

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

¿Cómo puedo mantener la misma salida de cadena como está escrita, pero evitar que el docker-compose lo interprete como una interpolación de cadena defectuosa?

Nathan Hanna
fuente
1
No es el analizador YAML el que está interpretando esa cadena. YAML no sabe nada ${}. La interpretación la realiza docker-composey está escrita en Python, por lo que la etiqueta ruby ​​también era inapropiada.
Anthon
Eliminé la suposición incorrecta de que se trata de un problema de YAML. Causó que al menos otra persona fuera engañada y perdiera el tiempo
Anthon

Respuestas:

130

Estás accediendo a la docker-composesustitución de variables, que está bien documentada aquí :

Se admiten ambos $VARIABLEy la ${VARIABLE}sintaxis. Las funciones de estilo shell extendidas, como ${VARIABLE-default}y ${VARIABLE/foo/bar}, no son compatibles.

Puede utilizar un $$(signo de dólar doble) cuando su configuración necesite un signo de dólar literal. Esto también evita que Compose interpole un valor, por lo $$que le permite hacer referencia a variables de entorno que no desea que compose procese.

docker-composeestá escrito en Python, como puede ver en github , el mecanismo de duplicación para obtener el significado original de los caracteres especiales se puede encontrar en muchos programas, necesitaba usar esto yo mismo, mientras programaba, en 1984.

Anthon
fuente
37

Encontré la respuesta copiando la sugerencia de %personajes en esta publicación

Requiere un signo de dólar doble $$.

Así que necesitaba "$${Time.now}", que se evalúa como"${Time.now}"

Nathan Hanna
fuente