Вот так выглядит мой 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'
shell-script
ubuntu
text-processing
docker
yaml
user3142695
источник
источник
sed
,awk
иregular expressions
обновить файл.ruamel.yaml
библиотеку для Python.Ответы:
Существует множество библиотек yaml для Perl, Python и т. Д., Если это нормально, делать это не напрямую из сценария оболочки, а использовать другой язык.
Другой вариант - установить процессор yaml из командной строки и вызвать его из сценария оболочки.
источник
Я написал https://github.com/kislyuk/yq , обертку вокруг https://stedolan.github.io/jq/ , для решения этого варианта использования.
источник
yq -y '.newthing=...' input.yml > output.yml
. (Если вы спрашиваете об обновлении на месте, напримерsed -i
, yq не может сделать это самостоятельно, но вы можете использоватьsponge
:.yq -y .newthing=... file.yml | sponge file.yml
)Я написал yaml_cli ( https://github.com/Gallore/yaml_cli ), чтобы сделать именно то, что вам нужно. Он основан на питоне. Это будет синтаксис для вашего примера:
Отзывы о yaml_cli приветствуются.
источник
Поскольку причина, по которой вы хотите это сделать, заключается в изменении файла docker-compose, другой альтернативой является использование файла JSON. Docker-compose теперь поддерживает файлы JSON . Поддержка манипуляций с JSON в командной строке уже очень хорошая (например, jq )
источник