Docker 复合文件格式和配置

Docker compose file format and configuration

提问人:uranium235 提问时间:11/17/2023 最后编辑:uranium235 更新时间:11/17/2023 访问量:37

问:

我有一个从以前的供应商那里转移过来的 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-compose DevOps

评论

0赞 derpirscher 11/17/2023
"它不能通过 compose 构建“非常确定,会给你带来某种错误。介意分享这个错误吗?docker-compose
0赞 uranium235 11/17/2023
是的。它说(root) Additional property api-service is not allowed".

答:

0赞 knittl 11/17/2023 #1

Docker 复合文件必须具有两个顶级键和 . 是一个字符串,是所有服务的字典。您的代码片段看起来像一个服务定义。versionservicesversionservices

https://docs.docker.com/compose/compose-file/compose-file-v3/

最小撰写文件:

version: "3.8"
services:
  app:
    image: hello-world

评论

0赞 uranium235 11/17/2023
谢谢你的建议。我已经熟悉基本的docker compose文件格式。我想知道是否有任何 docker compose 功能可以组合两个或多个部分 docker compose 文件?目前我有 3 个该格式的文件,仅使用部分格式没有任何意义。我的想法就像有一个主要的 docker compose 文件,它将包含这些部分文件,以制作一个完全工作的 docker compose 文件。
0赞 knittl 11/17/2023
@uranium235我不知道有这样的功能。你可以问那些向你提供这些文件的人,你应该如何运行它们
2赞 David Maze 11/17/2023 #2

这看起来像一个“版本 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