Bagaimana cara keluar dari tanda $ dollar di file penulisan buruh pelabuhan?

91

Saya memiliki skalar YAML yang memberikan kesalahan berikut ketika saya mencoba mengevaluasi docker-compose.ymlfile saya :

KESALAHAN: Format interpolasi tidak valid untuk opsi "lingkungan" dalam layanan "time_service": "$ {Time.now}"

YAML:

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

Bagaimana saya bisa mempertahankan output string yang sama seperti yang tertulis, tetapi menghindari pembuat galangan-menulis menafsirkannya sebagai interpolasi string yang salah?

Nathan Hanna
sumber
1
Bukan parser YAML yang menafsirkan string itu. YAML tidak tahu tentang ${}. Penafsiran dilakukan oleh docker-composedan itu ditulis dengan Python, jadi tag ruby ​​juga tidak pantas.
Anthon
Saya menghapus asumsi yang salah bahwa ini adalah masalah YAML. Ini menyebabkan setidaknya satu orang lain disesatkan dan membuang waktu
Anthon

Jawaban:

131

Anda dapat menggunakan $$(tanda dolar ganda) jika konfigurasi Anda memerlukan tanda dolar literal.

Anda mencapai docker-composesubstisi variabel, yang didokumentasikan dengan baik di sini :

Keduanya $VARIABLEdan ${VARIABLE}sintaks didukung. Fitur gaya shell yang diperluas, seperti ${VARIABLE-default}dan ${VARIABLE/foo/bar}, tidak didukung.

Anda dapat menggunakan $$(tanda dolar ganda) jika konfigurasi Anda memerlukan tanda dolar literal. Ini juga mencegah Compose menginterpolasi nilai, jadi a $$memungkinkan Anda merujuk ke variabel lingkungan yang tidak ingin diproses oleh Compose.

docker-composeditulis dengan Python, seperti yang Anda lihat di github , mekanisme penggandaan untuk mendapatkan makna asli dari karakter khusus dapat ditemukan di banyak program, saya perlu menggunakan ini sendiri, saat memprogram, sejauh tahun 1984.

Anthon
sumber
37

Temukan jawabannya dengan menyalin saran untuk %karakter di posting ini

Ini membutuhkan tanda dolar ganda $$.

Jadi saya perlu "$${Time.now}", yang mengevaluasi ke"${Time.now}"

Nathan Hanna
sumber