我有以下损坏的docker compose文件
version: '3.4'
x-vols1: &vols-1
- /home/:/home/
x-vols2: &vols-2
- /tmp/:/tmp/
services:
app1:
container_name: app1
image: app1
volumes:
<<: *vols-1
app2:
container_name: app2
image: app2
volumes:
<<: *vols-1
<<: *vols-2
此操作失败,并显示以下错误
$ docker-compose -f test.yaml config
ERROR: yaml.constructor.ConstructorError: while constructing a mapping
in "./test.yaml", line 14, column 13
expected a mapping for merging, but found scalar
in "./test.yaml", line 4, column 7
问题1:如何在docker-comuse
中合并数组?我尝试使用的语法是用于合并字典的语法
问题2:如果没有办法合并数组,有没有变通方法?
用例:我有多个服务,其中一些映射一些卷,另一些映射其他卷,另一些映射所有卷。我不想重复我自己。
谢谢你!
这是当前接受的答案的一个细微变化,不需要您更改docker compose命令行以包含其他文件:
version: '3.9'
services:
app1:
container_name: app1
image: app1
extends:
file: common-volumes.yml
service: app1
app2:
container_name: app2
image: app2
extends:
file: common-volumes.yml
service: app2
volumes:
- /tmp/:/tmp/
x-vols1: &vols-1
volumes:
- /home/:/home/
services:
app1:
<<: *vols-1
app2:
<<: *vols-1
要查看生成的配置,请执行以下操作:
docker compose config
所需的行为可以通过使用多个docker-compose
文件来实现,每个卷一个。请注意,不需要锚点和别名,但将它们保留在与问题对齐的位置。
< code>base.yaml
version: '3.4'
services:
app1:
container_name: app1
image: app1
app2:
container_name: app2
image: app2
< code>vol1.yaml
version: '3.4'
x-vols1: &vols-1
volumes:
- /home/:/home/
services:
app1:
container_name: app1
image: app1
<<: *vols-1
app2:
container_name: app2
image: app2
<<: *vols-1
vol2.yaml
version: '3.4'
x-vols2: &vols-2
volumes:
- /tmp/:/tmp/
services:
app2:
container_name: app2
image: app2
<<: *vols-2
验证为
$ docker-compose -f base.yaml -f vol1.yaml -f vol2.yaml config
结果
services:
app1:
container_name: app1
image: app1
volumes:
- /home:/home:rw
app2:
container_name: app2
image: app2
volumes:
- /home:/home:rw
- /tmp:/tmp:rw
version: '3.4'
附加文档https://docs.docker.com/compose/extends/
Yaml合并语法用于合并映射,而不是数组。有关更多信息,请参阅此问题。但是,如果您只是添加单个卷,则不需要合并任何内容。只需将别名作为数组条目插入:
version: '3.4'
x-vols1: &vols-1
"/home/:/home/"
x-vols2: &vols-2
"/tmp/:/tmp/"
services:
app1:
container_name: app1
image: app1
volumes:
- *vols-1
app2:
container_name: app2
image: app2
volumes:
- *vols-1
- *vols-2
我想在YAML中合并数组,并通过ruby加载它们- 我希望组合数组为 我收到错误:在分析块映射时找不到预期的键 我如何在YAML中合并数组?
问题内容: 我正在尝试在docker-compose中安装一个卷以Apache镜像。问题是,我的docker中的apache运行在,但是挂载的目录在之下创建。如何指定挂载目录的用户? 我试图运行命令。但它说 我希望能够指定安装它的用户。有办法吗? 问题答案: 首先确定用户的uid : 然后,在您的Docker主机上,使用uid(在本示例中为100)更改已安装目录的所有者: 动态扩展 如果您正在使用
在结构中相同类型的连续成员之间的指针算术曾经是一种常见做法,而指针算术仅在数组中有效。在C中,它将是显式的未定义行为,因为数组只能由声明或新表达式创建。但是C语言将数组定义为连续分配的非空对象集,具有特定的成员对象类型,称为元素类型。(N1570 草案为 C11,6.2.5 类型 §20)。因此,如果我们可以确保成员是连续的(意味着它们之间没有填充),那么将其视为数组可能是合法的。 下面是一个简化
我可以在不重新键入的情况下重用YAML中的键吗?如果可以通过锚点重复该键,则重命名该键将非常简单。
问题内容: 我有2个数组 我是否可以将这些单独的数组合并为一个并将这些值相加,以便结果为: 这是我目前拥有的功能,但我似乎无法使其工作: 问题答案: 可以用两行代码完成此实际计算,而无需循环: http://codepad.viper-7.com/ieSkHQ 您只需要进行适当的调整即可解决您的嵌套结构。
问题内容: 如何将所有数组项合并为一个字符串? 问题答案: 使用功能。 例如: