이것이 내 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'
이제 (우분투 서버에서) 쉘 스크립트를 통해 뭔가를 추가해야 합니다. 이것이 가능한지 확실하지 않습니다.
nginx/links
존재하지 않는 경우 새 요소 추가newthing
newthing-block이 없으면 블록을 추가합니다.
새 콘텐츠는 다음과 같아야 합니다.
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'
답변1
나는 썼다https://github.com/kislyuk/yq, 래퍼https://stedolan.github.io/jq/, 이 사용 사례를 해결하려면.
답변2
나는 yaml_cli(https://github.com/Gallore/yaml_cli) 정확히 필요한 작업을 수행합니다. 파이썬을 기반으로 합니다. 귀하의 예에 대한 구문은 다음과 같습니다.
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' #
yaml_cli에 대한 피드백을 환영합니다.
답변3
Perl, Python 등을 위한 많은 yaml 라이브러리가 있습니다. 쉘 스크립트에서 직접 수행할 수 없다면 다른 언어를 사용하십시오.
또 다른 옵션은 명령줄을 설치하는 것입니다.YAML 프로세서를 누른 다음 쉘 스크립트에서 호출합니다.