So sieht meine docker-compose.yml aus.
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'
Jetzt muss ich einige Inhalte über ein Shell-Skript hinzufügen (auf einem Ubuntu-Server). Ich bin mir nicht ganz sicher, ob es überhaupt möglich ist:
- Fügen Sie ein neues Element hinzu
nginx/links
, falls es nicht vorhanden ist - Anfügen
newthing
Block , wenn kein newthing-Block vorhanden ist
Der neue Inhalt sollte folgendermaßen aussehen:
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
quelle
quelle
sed
,awk
und dieregular expressions
Dateien zu aktualisieren.ruamel.yaml
Bibliothek für Python zu überprüfen .Antworten:
Es gibt eine Reihe von Yaml-Bibliotheken für Perl, Python usw., wenn es in Ordnung ist, dies nicht direkt über ein Shell-Skript zu tun, sondern eine andere Sprache zu verwenden.
Eine andere Möglichkeit besteht darin, einen Befehlszeilen- Yaml-Prozessor zu installieren und ihn von Ihrem Shell-Skript aus aufzurufen.
quelle
Ich habe https://github.com/kislyuk/yq geschrieben , einen Wrapper um https://stedolan.github.io/jq/ , um diesen Anwendungsfall zu behandeln.
quelle
yq -y '.newthing=...' input.yml > output.yml
. (Wenn Sie nach einem Update fragensed -i
, kann yq es noch nicht alleine machen, aber Sie können verwendensponge
:yq -y .newthing=... file.yml | sponge file.yml
.)Ich habe yaml_cli ( https://github.com/Gallore/yaml_cli ) geschrieben, um genau das zu tun, was Sie brauchen. Es basiert auf Python. Dies wäre die Syntax für Ihr Beispiel:
Feedback zu yaml_cli ist willkommen.
quelle
Da der Grund dafür darin besteht, eine Docker-Compose-Datei zu ändern, besteht eine andere Alternative darin, eine JSON-Datei zu verwenden. Docker-Compose unterstützt jetzt JSON-Dateien . Die Unterstützung für die Befehlszeilenmanipulation von JSONs ist bereits sehr gut (Beispiel: jq )
quelle