gpt4 book ai didi

python - 使用 PyYAML 编辑 docker-compose.yml

转载 作者:太空宇宙 更新时间:2023-11-03 14:04:00 27 4
gpt4 key购买 nike

我有一个非常标准的 docker-compose.yml,我需要以编程方式编辑数据库的密码。

由于它是一个 YAML 文件,我认为编辑和转储内容会很简单。到目前为止,我尝试了 PyYAML,它只是弄乱了 docker-compose 文件,我不知道为什么。

加载和转储相同的内容,它破坏了结构。

docker-compose.yml 的内容:

version: '2'
services:
web:
container_name: xxx
ports:
- "80:80"
volumes:
- .:/xxx
depends_on:
- mysql
build: .
mysql:
ports:
- "32768:32768"
- "3306:3306"
container_name: xxx-mysql
restart: always
image: mariadb:latest
environment:
MYSQL_ROOT_PASSWORD: 'thiswillbechangeonsetupscript'
MYSQL_DATABASE: 'xxxdb'
volumes:
- ./database:/var/lib/mysql
ports:
- "3306:3306"

这就是我加载和转储内容的方式:

import yaml

with open("docker-compose.yml", 'r') as ymlfile:
docker_config = yaml.load(ymlfile)

with open("docker-compose.yml", 'w') as newconf:
yaml.dump(docker_config, newconf)

这就是文件的保存方式。

services:
mysql:
container_name: xxx-mysql
environment: {MYSQL_DATABASE: xxxdb, MYSQL_ROOT_PASSWORD: thiswillbechangeonsetupscript}
image: mariadb:latest
ports: ['3306:3306']
restart: always
volumes: ['./database:/var/lib/mysql']
web:
build: .
container_name: xxx
depends_on: [mysql]
ports: ['80:80']
volumes: ['.:/xxx']
version: '2'

有没有更好的方法来做到这一点?!我缺少什么?

最佳答案

在编写yaml时需要添加default_flow_style=False:

import yaml

with open("docker-compose.yml", 'r') as ymlfile:
docker_config = yaml.load(ymlfile)

with open("docker-compose_new.yml", 'w') as newconf:
yaml.dump(docker_config, newconf, default_flow_style=False)

然后您将得到以下输出,除了使用字母顺序编写行外,它与您的输入类似:

services:
mysql:
container_name: xxx-mysql
environment:
MYSQL_DATABASE: xxxdb
MYSQL_ROOT_PASSWORD: thiswillbechangeonsetupscript
image: mariadb:latest
ports:
- 3306:3306
restart: always
volumes:
- ./database:/var/lib/mysql
web:
build: .
container_name: xxx
depends_on:
- mysql
ports:
- 80:80
volumes:
- .:/xxx
version: '2'

请注意,在您的原始 docker-compose.yaml 中,您声明了两次 ports 变量,因此 yaml 解析器只会考虑最后一个变量。要解决此问题,请删除以下行:

ports:
- "3306:3306"

然后,按照上面的解释运行写入操作会产生以下输出:

services:
mysql:
container_name: xxx-mysql
environment:
MYSQL_DATABASE: xxxdb
MYSQL_ROOT_PASSWORD: thiswillbechangeonsetupscript
image: mariadb:latest
ports:
- 32768:32768
- 3306:3306
restart: always
volumes:
- ./database:/var/lib/mysql
web:
build: .
container_name: xxx
depends_on:
- mysql
ports:
- 80:80
volumes:
- .:/xxx
version: '2'

关于python - 使用 PyYAML 编辑 docker-compose.yml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45699189/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com