提问人:uranium235 提问时间:11/17/2023 最后编辑:uranium235 更新时间:11/17/2023 访问量:37
Docker 复合文件格式和配置
Docker compose file format and configuration
问:
我有一个从以前的供应商那里转移过来的 docker compose 文件,这是这样的
api-service:
image: ${IMAGE}
ports:
- "8080:8080"
environment:
SPRING_PROFILES_ACTIVE: ${PROFILE}
log_driver: awslogs
当我尝试使用此文件进行构建时,无法通过 compose 构建它。错误消息是我认为此文件的格式不正确,无法用于 docker compose。我想知道是否有任何配置需要使该文件正常工作,或者是否有某种 docker 功能可以像这样组合部分 docker compose 文件?(root) Additional property api-service is not allowed".
我将添加更多信息。目前,我在不同的服务名称下有 2 个这样的文件,我的想法是必须有一个父 docker compose 文件,该文件将包含/导入这 2 个文件以形成一个完全工作的 docker compose 文件。我已经阅读了此类功能的 docker compose 文档,但没有找到任何接近此类功能的东西。
答:
Docker 复合文件必须具有两个顶级键和 . 是一个字符串,是所有服务的字典。您的代码片段看起来像一个服务定义。version
services
version
services
https://docs.docker.com/compose/compose-file/compose-file-v3/
最小撰写文件:
version: "3.8"
services:
app:
image: hello-world
评论
这看起来像一个“版本 1”Compose 文件。这是 Compose YAML 文件格式的第一个版本。它只包含顶层的服务定义列表;它没有标签或块头;并且它没有办法声明或.version:
services:
networks:
volumes:
撰写工具本身也有两个版本。截至 2023 年 6 月,Docker 停止了对旧版本(基于 Python)的支持。如果可以使用空间运行,则表示您拥有较新的版本。但是,撰写工具版本 2 不支持撰写文件版本 1。docker compose
如果您有较新的撰写工具,则使某些内容接近工作的最快方法是将整个文件缩进两个空格,然后添加为上面的第一行。services:
services:
api-service:
...
如果要保持与旧版撰写工具的兼容性,还需要一个 or 行,通常位于文件的最顶部。version: '2.4'
version: '3.8'
在所有这些文件格式中,指定日志记录驱动程序的方式都已更改。驱动程序设置位于 logging:
块下(链接到 Compose 文件 v3 文档;Compose file v2 和 Compose Specification 中的相同设置)。
所以我可能会把这个文件翻译成
version: '3.8' # ignored by Compose v2; specifies file format in Compose v1
services: # add, indent following lines
api-service:
image: ${IMAGE}
ports:
- "8080:8080"
environment:
SPRING_PROFILES_ACTIVE: ${PROFILE}
logging: # change from log_driver
driver: awslogs
评论
docker-compose
(root) Additional property api-service is not allowed".