Voici à quoi ressemble mon 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'
Maintenant, je dois ajouter du contenu via un script shell (sur un serveur Ubuntu). Je ne sais pas trop si c'est possible du tout:
- Ajouter un nouvel élément à
nginx/links
, s'il n'est pas existant - Ajouter un
newthing
bloc si aucun nouveau bloc n'est existant
Le nouveau contenu devrait ressembler à ceci:
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
la source
la source
sed
,awk
etregular expressions
de mettre à jour votre dossier.ruamel.yaml
bibliothèque de Python.Réponses:
Il existe un certain nombre de bibliothèques yaml pour Perl, Python, etc. si vous ne pouvez pas le faire directement à partir d'un script shell, mais utilisez un autre langage.
Une autre option consiste à installer un processeur yaml en ligne de commande et à l'appeler à partir de votre script shell.
la source
J'ai écrit https://github.com/kislyuk/yq , un wrapper autour de https://stedolan.github.io/jq/ , pour résoudre ce cas d'utilisation.
la source
yq -y '.newthing=...' input.yml > output.yml
. (Si vous demandez une mise à jour en place, commesed -i
, YQ ne peut le faire par lui - même encore, mais vous pouvez utilisersponge
:yq -y .newthing=... file.yml | sponge file.yml
.)J'ai écrit yaml_cli ( https://github.com/Gallore/yaml_cli ) pour faire exactement ce dont vous avez besoin. Il est basé sur python. Ce serait la syntaxe de votre exemple:
Les commentaires sur yaml_cli sont appréciés.
la source
Étant donné que la raison pour laquelle vous souhaitez le faire est de modifier un fichier de composition de docker, une autre alternative consiste à utiliser un fichier JSON. Docker-compose prend désormais en charge les fichiers JSON . La prise en charge de la manipulation en ligne de commande des JSON est déjà très bonne (ex: jq )
la source