É assim que meu docker-compose.yml se parece.
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'
Agora eu preciso adicionar algum conteúdo via shell script (em um servidor ubuntu). Não tenho certeza se é possível:
- Adicione novo elemento a
nginx/links
, se ele não existir - Anexar
newthing
bloco se não houver nenhum bloco novo
O novo conteúdo deve ficar assim:
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
user3142695
fonte
fonte
sed
,awk
eregular expressions
para atualizar o arquivo.ruamel.yaml
biblioteca do Python.Respostas:
Existem várias bibliotecas yaml para Perl, Python, etc.
Outra opção é instalar um processador yaml da linha de comando e chamá-lo a partir do seu shell script.
fonte
Eu escrevi https://github.com/kislyuk/yq , um wrapper em https://stedolan.github.io/jq/ , para abordar esse caso de uso.
fonte
yq -y '.newthing=...' input.yml > output.yml
. (Se você está perguntando sobre uma atualização no local, comosed -i
, yq não pode fazê-lo por si só ainda, mas você pode usarsponge
:yq -y .newthing=... file.yml | sponge file.yml
.)Eu escrevi yaml_cli ( https://github.com/Gallore/yaml_cli ) para fazer exatamente o que você precisa. É baseado em python. Essa seria a sintaxe do seu exemplo:
O feedback sobre yaml_cli é apreciado.
fonte
Como o motivo para fazer isso é modificar um arquivo de composição de encaixe, outra alternativa é usar um arquivo JSON. O Docker-compose agora suporta arquivos JSON . O suporte à manipulação de JSONs na linha de comando já é muito bom (ex: jq )
fonte