别再给你的 docker-compose.yml 使用 version 字段了。

1,560 阅读2分钟

对于那些已经使用 Docker Compose 一段时间的人来说,docker-compose.yml 文件顶部的 “version” 属性可能很熟悉。然而,时代已经改变。该属性现已正式被视为过时。

请参考以下 Docker Compose 文件:

version: '3.9'


services:
  db:
    image: postgres:10.0-alpine
    volumes:
      - ./db:/docker-entrypoint-initdb.d/

  api:
    build: api
    image: dockersamples/wordsmith-api
    deploy:
      replicas: 5

  web:
    build: web
    image: dockersamples/wordsmith-web
    ports:
     - "8080:80"

如果尝试运行 docker compose up,可能会看到以下警告:

WARN[0000] /Users/moby/compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 
[+] Running 3/3
 ⠹ api [⠀⠀⠀⠀] Pulling                                                         5.3s 
 ⠹ web [⠀⠀⠀⠀] Pulling                                                         5.3s 
 ⠹ db [⣿⣿⣿⠀⠀⠀⠀⠀

为什么它被视为过时?

最初,version 属性用于指定 Compose 文件的架构版本,这对向后兼容性很有帮助。然而,Docker Compose 现在已经发展,默认使用最新的 Compose 规范。这意味着指定版本是多余的,甚至会导致警告。

Docker Compose 现在如何处理 Compose 文件?

Docker Compose 主要依赖 Compose 规范来解释您的 docker-compose.yml 文件。该规范不断更新,以包括新功能和改进。当您使用 Docker Compose 时,它会自动将最新支持的架构应用到您的文件中。

这对您意味着什么?

  • 移除 version 属性:可以安全地从 docker-compose.yml 文件中删除 version 属性,这不会影响 Compose 文件的功能。

  • 使用最新的 Compose 规范:利用最新的 Compose 规范提供的新功能和改进。

  • 忽略警告消息:如果您的文件中仍然有 version 属性,您可能会看到警告消息,但这些消息可以安全地忽略。

结论

虽然 version 属性在过去可能是必不可少的,但在现代 Docker Compose 工作流中已不再需要。通过删除它,您可以简化 Compose 文件并保持最新功能。

请记住:应重点关注 Compose 文件的内容,定义您的服务、网络、卷和其他组件,而不是特定的版本。

想要了解更多关于最新 Compose 规范的特定功能吗?

参考:

全文完!

如果你喜欢我的文章,欢迎关注我的微信公众号:deliverit