继承带有扩展字段的卷
Inherit volumes with extension fields
我想与来自单个 `docker-compose.yml` 文件的所有 docker 服务共享主机 `/etc/timezone` 文件。
我想,使用 extension fields 会是个好主意。
我发现 扩展字段用于继承 environment variables
.
所以,我已经用 docker-compose.yml
试过了,如下所示:
x-timezone-volumes:
&timezone-volumes
volumes:
- "/etc/localtime:/etc/localtime:ro"
- "/etc/timezone:/etc/timezone:ro"
services:
postgres-database:
image: "postgres:12-alpine"
hostname: PostgresContainer
networks:
backend-network:
env_file:
- backups/.env.db
volumes:
<<: *timezone-volumes
- ./postgres-data:/var/lib/postgresql/data
我遇到了这个错误:
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.postgres-database.volumes contains an invalid type, it should be an array
据我了解 , it is because merge key 已过时。
是不是不能用了?
还有其他继承卷的解决方案吗?
Yaml 合并 <<:
仅支持映射。由于它包含一个冒号,因此在某种程度上也被其语法所指责。
如果你有这样的对象:
x-timezone-volumes:
&timezone-volumes
volumes:
- "/etc/localtime:/etc/localtime:ro"
- "/etc/timezone:/etc/timezone:ro"
你可以这样引用:
services:
app:
<<: *timezone-volumes
在您的情况下,您希望将另一个项目附加到卷数组。所以这没有帮助。您最多可以引用各个字符串。
x-timezone-volumes:
&timezone-volumes
volumes:
- &tz1 "/etc/localtime:/etc/localtime:ro"
- &tz2 "/etc/timezone:/etc/timezone:ro"
然后像这样使用它:
services:
app:
volumes:
- ./foo:/bar
- *tz1
- *tz2
您也可以混合搭配它们。使用没有额外卷的第一个版本和需要添加更多卷的第二个版本。为此,您可以设置整个对象和数组元素的锚点名称。
也就是说,还有环境变量TZ
,您也可以使用它来控制容器的时区。
services:
app:
environment:
TZ: UTC
我想与来自单个 `docker-compose.yml` 文件的所有 docker 服务共享主机 `/etc/timezone` 文件。
我想,使用 extension fields 会是个好主意。
我发现 environment variables
.
所以,我已经用 docker-compose.yml
试过了,如下所示:
x-timezone-volumes:
&timezone-volumes
volumes:
- "/etc/localtime:/etc/localtime:ro"
- "/etc/timezone:/etc/timezone:ro"
services:
postgres-database:
image: "postgres:12-alpine"
hostname: PostgresContainer
networks:
backend-network:
env_file:
- backups/.env.db
volumes:
<<: *timezone-volumes
- ./postgres-data:/var/lib/postgresql/data
我遇到了这个错误:
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.postgres-database.volumes contains an invalid type, it should be an array
据我了解
是不是不能用了?
还有其他继承卷的解决方案吗?
Yaml 合并 <<:
仅支持映射。由于它包含一个冒号,因此在某种程度上也被其语法所指责。
如果你有这样的对象:
x-timezone-volumes:
&timezone-volumes
volumes:
- "/etc/localtime:/etc/localtime:ro"
- "/etc/timezone:/etc/timezone:ro"
你可以这样引用:
services:
app:
<<: *timezone-volumes
在您的情况下,您希望将另一个项目附加到卷数组。所以这没有帮助。您最多可以引用各个字符串。
x-timezone-volumes:
&timezone-volumes
volumes:
- &tz1 "/etc/localtime:/etc/localtime:ro"
- &tz2 "/etc/timezone:/etc/timezone:ro"
然后像这样使用它:
services:
app:
volumes:
- ./foo:/bar
- *tz1
- *tz2
您也可以混合搭配它们。使用没有额外卷的第一个版本和需要添加更多卷的第二个版本。为此,您可以设置整个对象和数组元素的锚点名称。
也就是说,还有环境变量TZ
,您也可以使用它来控制容器的时区。
services:
app:
environment:
TZ: UTC