Docker作成ファイルで$ドル記号をエスケープするにはどうすればよいですか?


96

docker-compose.ymlファイルを評価しようとすると、次のエラーをスローするYAMLスカラーがあります。

エラー:サービス「time_service」の「environment」オプションの補間形式が無効です:「$ {Time.now}」

YAML:

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

書き込まれたものと同じ文字列出力を維持しながら、docker-composeがそれを誤った文字列補間として解釈することを回避するにはどうすればよいですか?


1
その文字列を解釈しているのはYAMLパーサーではありません。YAMLはについて知りません${}。解釈はdocker-composePythonによって行われ、Pythonで記述されているため、タグrubyも不適切でした。
Anthon 2016年

これがYAMLの問題であるという誤った仮定を削除しました。それにより、少なくとも1人の他の人が誤解され、時間が無駄になりました
Anthon 2017

回答:


141

$$構成で文字通りのドル記号が必要な場合は、(2ドル記号)を使用できます。

あなたはdocker-compose可変置換を打っています、それはここでよく文書化されています

$VARIABLE${VARIABLE}構文の両方がサポートされています。${VARIABLE-default}およびなどの拡張シェルスタイルの機能${VARIABLE/foo/bar}はサポートされていません。

$$構成で文字通りのドル記号が必要な場合は、(2ドル記号)を使用できます。これにより、Composeが値を補間することも防止されるため、$$Composeで処理したくない環境変数を参照できます。

docker-composeはPythonで書かれており、githubで見られるように、特殊文字の元の意味を取得するための倍増メカニズムは多くのプログラムで見られます。1984年まで、プログラミング中にこれを自分で使用する必要がありました。


38

この投稿の%キャラクターの提案をコピーして答えを見つけました

二重ドル記号が必要$$です。

だから私は必要でした"$${Time.now}"、それは"${Time.now}"

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.