How can I escape a $ dollar sign in a docker compose file?
EscapingDocker ComposeEscaping Problem Overview
I have a YAML scalar that is throwing the following error when I try to evaluate my docker-compose.yml
file:
> ERROR: Invalid interpolation format for "environment" option in > service "time_service": "${Time.now}"
YAML:
---
version: '2'
services:
time_service:
build: "."
environment:
TIME: "${Time.now}"
How can I maintain the same string output as written, but avoid having the docker-compose interpret it as faulty string interpolation?
Escaping Solutions
Solution 1 - Escaping
> You can use a $$
(double-dollar sign) when your configuration needs
> a literal dollar sign.
You are hitting the docker-compose
variable substitution, which is well documented 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
is written in Python, as you see on github, the doubling mechanism to get the original meaning of special characters can be found in many programs, I needed to use this myself, while programming, as far back in 1984.
Solution 2 - Escaping
Found the answer by copying the suggestion for %
characters in this post
It requires a double dollar sign $$
.
So I needed "$${Time.now}"
, which evaluates to "${Time.now}"