これは私の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
ブロックを追加します新しいコンテンツは次のようになります。
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'
Perl用の多くのyamlライブラリがあります。シェルスクリプトから直接ではなく別の言語を使用する場合は、Pythonなど)です。
別のオプションは、コマンドライン yamlプロセッサ をインストールして、シェルスクリプトから呼び出すことです。
このユースケースに対処するために、 https://stedolan.github.io/jq/ のラッパーである https://github.com/kislyuk/yq を書きました。
私は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に関するフィードバックを歓迎します。