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 le script Shell (sur un serveur Ubuntu). Je ne sais pas trop si c'est possible du tout:
nginx/links
, s'il n'existe pasnewthing
si aucun nouveau bloc n'est existantLe 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'
Il existe un certain nombre de bibliothèques yaml pour Perl, Python etc. si c'est ok de ne pas le faire directement à partir d'un script Shell, mais d'utiliser un autre langage.
Une autre option consiste à installer une ligne de commande processeur yaml , et à l'appeler à partir de votre script Shell.
J'ai écrit https://github.com/kislyuk/yq , un wrapper autour https://stedolan.github.io/jq/ , pour résoudre ce cas d'utilisation.
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:
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' #
Les commentaires sur yaml_cli sont appréciés.
Étant donné que la raison pour laquelle vous souhaitez effectuer cette opération est de modifier un fichier Docker-compose, une autre alternative consiste à utiliser un fichier JSON. Docker-compose prend désormais en charge fichiers JSON . La prise en charge de la manipulation en ligne de commande des JSON est déjà très bonne (ex: jq )