これが私のdocker-compose.ymlの外観です。
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'
これで(Ubuntuサーバー上)シェルスクリプトを介して何かを追加する必要があります。これが可能かどうかはわかりません。
nginx/links
存在しない場合は新しい要素を追加newthing
newthing-block がない場合は、ブロックを追加します。
新しいコンテンツは次のようになります。
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'
答え1
私は書いたhttps://github.com/kislyuk/yq、ラッパーhttps://stedolan.github.io/jq/、このユースケースを解決するには。
答え2
私は yaml_cli(https://github.com/Gallore/yaml_cli) 正確に必要な作業を行います。 Pythonに基づいています。あなたの例の構文は次のとおりです。
yaml_cli \
-f docker-compose.yml \ # read from and save to file
--list-append \ # flag to append to lists instead of replacing existing values
-s nginx:links newthing \ # add a value of type string; here you need --list-append
-s newthing:container_name foo \ # key 'newthing' is created automatically
-s newthing:image 'newthing:1.2.3' \ #
-s newthing:restart always \ #
-s newthing:hostname 'example.com' #
yaml_cliに関するフィードバックを歓迎します。
答え3
Perl、Pythonなどのための多くのyamlライブラリがあります。シェルスクリプトで直接実行できない場合は、別の言語を使用してください。
別のオプションは、コマンドラインをインストールすることです。YAMLプロセッサをクリックし、シェルスクリプトから呼び出します。