Ini adalah bagaimana docker-compose.yml saya terlihat.
nginx:
container_name: 'nginx'
image: 'nginx:1.11'
restart: 'always'
ports:
- '80:80'
- '443:443'
volumes:
- '/opt/nginx/conf.d:/etc/nginx/conf.d:ro'
links:
- 'anything'
Sekarang saya perlu menambahkan beberapa konten melalui skrip shell (di server ubuntu). Saya tidak yakin apakah itu mungkin:
- Tambahkan elemen baru ke
nginx/links
, jika tidak ada - Tambahkan
newthing
blok jika tidak ada blok-hal baru
Konten baru akan terlihat seperti ini:
nginx:
container_name: 'nginx'
image: 'nginx:1.11'
restart: 'always'
ports:
- '80:80'
- '443:443'
volumes:
- '/opt/nginx/conf.d:/etc/nginx/conf.d:ro'
- '/etc/letsencrypt:/etc/letsencrypt'
links:
- 'anything'
- 'newthing'
newthing:
container_name: foo
image: 'newthing:1.2.3'
restart: always
hostname: 'example.com'
shell-script
ubuntu
text-processing
docker
yaml
pengguna3142695
sumber
sumber
sed
,awk
danregular expressions
memperbarui file Anda.ruamel.yaml
perpustakaan untuk Python.Jawaban:
Ada sejumlah perpustakaan yaml untuk Perl, Python dll. Jika boleh melakukannya tidak langsung dari skrip shell, tetapi gunakan bahasa lain.
Pilihan lain adalah menginstal prosesor yaml baris perintah , dan memanggilnya dari skrip shell Anda.
sumber
Saya menulis https://github.com/kislyuk/yq , pembungkus di sekitar https://stedolan.github.io/jq/ , untuk mengatasi kasus penggunaan ini.
sumber
yq -y '.newthing=...' input.yml > output.yml
. (Jika Anda bertanya tentang pembaruan di tempat, sepertised -i
, yq belum bisa melakukannya sendiri, tetapi Anda dapat menggunakansponge
:.yq -y .newthing=... file.yml | sponge file.yml
)Saya menulis yaml_cli ( https://github.com/Gallore/yaml_cli ) untuk melakukan apa yang Anda butuhkan. Ini didasarkan pada python. Ini akan menjadi sintaksis untuk contoh Anda:
Umpan balik tentang yaml_cli sangat dihargai.
sumber
Karena alasan Anda ingin melakukan ini adalah untuk memodifikasi file menulis buruh pelabuhan, alternatif lain adalah menggunakan file JSON. Susunan docker sekarang mendukung file JSON . Dukungan untuk manipulasi baris perintah JSON sudah sangat bagus (mis: jq )
sumber