Mendefinisikan boolean dalam file docker-compose.yml:
environment:
SOME_VAR: true
dan menjalankan docker up
hasil dalam:
contains true, which is an invalid type, it should be a string, number, or a null
Upaya untuk menyelesaikan masalah
- Jika true diubah ke True masalah tetap ada.
Penggunaan
'true'
tidak diterima oleh kode itu sendiri ( aplikasi kerangka kerja mulai menggunakan./target/universal/stage/bin/APPNAME -Dplay.evolutions.db.default.autoApply=
, yaitu salah satu-Dplay.evolutions.db.default.autoApply=true
atau-Dplay.evolutions.db.default.autoApply=false
parameter):VAR memiliki tipe STRING daripada BOOLEAN
Menggunakan
yes
atauno
sebagai variabel menghasilkan:mengandung true, yang merupakan tipe tidak valid, harus berupa string, angka, atau null
Menggunakan
yes
dan menggunakan skrip yang berubahyes
menjadi karya nyata
Diskusi
Menurut dokumen Any boolean values; true, false, yes no, need to be enclosed in quotes to ensure they are not converted to True or False by the YML parser
:
Lingkungan Hidup
Tambahkan variabel lingkungan. Anda bisa menggunakan array atau kamus. Nilai boolean apa pun; benar, salah, ya tidak, perlu dilampirkan dalam tanda kutip untuk memastikan mereka tidak dikonversi ke Benar atau Salah oleh parser YML.
Variabel lingkungan dengan hanya kunci diselesaikan untuk nilai-nilai mereka pada mesin Compose sedang berjalan, yang dapat membantu untuk nilai-nilai rahasia atau spesifik host.
environment: RACK_ENV: development SHOW: 'true' SESSION_SECRET: environment: - RACK_ENV=development - SHOW=true - SESSION_SECRET
Pertanyaan
Mengapa itu tidak diizinkan?
sumber
DevOps Stack Exchange is a question and answer site for software engineers working on automated testing, continuous delivery, service integration and monitoring, and building SDLC infrastructure
Jawaban:
Ini berasal dari pilihan desain bahasa YAML tentang boolean
Setiap nilai tanda kutip yang cocok dengan "regex" ini:
Akan dikonversi ke
True
atauFalse
.Ini mulai menyebabkan masalah ketika kode Anda akan menguji nilai lingkungan menjadi ya atau tidak misalnya mengambil skrip ini (contoh lain dalam diskusinya PR ):
Dan pengaturan dalam file penulisan Anda
Akan menghasilkan
SOME_VAR
menjadiTrue
ketika naskah dijalankan, maka mengambil kasus salah karena tidak sama denganyes
.Jadi pilihan telah dibuat untuk melarang boolean untuk mencegah perilaku yang tidak diinginkan sulit di-debug ketika Anda tidak mengetahui aturan YAML.
Saya melihat dua cara untuk menyelesaikan masalah:
Sebagai
env_file
gantinya, mereka tidak diuraikan IIRC dan harus mencegah konversi.Seperti yang sudah Anda katakan, gunakan skrip pembungkus di sekitar peluncur untuk menentukan nilai alih-alih sebelum meluncurkan aplikasi, sesuatu yang harus dilakukan adalah:
sumber
Itu YAML. Ini diartikan
true
sebagai boolean. Envars harus berupa string, karenanya persyaratan untuk membuat jenisnya eksplisit melalui tanda kutip.Uji ini dengan https://www.json2yaml.com/
sumber