“docker-compose.yml”文件中指定版本的第一行是什么意思?

问题描述 投票:0回答:5

docker-compose.yml
文件的第一行,我们指定一个版本:

version: '3.9'

这到底是什么意思?!

安装最新版本后,我在 Windows 10 中尝试了以下操作

cmd

docker-compose --version

输出是:

Docker Compose version v2.17.2

那么我们如何在第一行输入

3.9
?!

django docker docker-compose version
5个回答
74
投票

该特定行意味着您正在使用新的 Compose 插件版本,该版本会忽略

version:
行。

Compose 工具有两种不同的实现,一种是用 Python 编写的(

docker-compose
,带有连字符),另一种是用 Go 编写并作为 Docker 扩展分发(
docker compose
,带有空格)。 您的输出
Docker Compose version v2...
表示您正在使用较新的 Go 插件版本的 Compose。

另外,Compose 文件格式有四种不同版本:

版本
version:
支持 Python 编写 插件撰写
1 缺席 Docker 之前的网络
2
2
,通过
2.4
单主机 Docker
3
3
,通过
3.8
Docker 群
规格 被忽略 仅限插件撰写

特别是,请参阅Compose 文件版本和升级:从来没有

version: '3.9'
,这意味着 Python 版本的 Compose 将拒绝该文件。 Compose 的插件版本使用 Compose 规范格式,该格式主要向后兼容版本 2 和版本 3 格式。

版本 2 和 3 有一些细微的差异,特别是在资源限制方面,其中版本 2 通常直接镜像

docker run
选项,而版本 3 有一些与 Swarm 兼容的选项,但如果您不使用它,则会被忽略。

我个人的做法通常是使用

version: '3.8'
,这是两种 Compose 实现都支持的最新版本的文件格式。 如果我需要资源限制,那么我将使用
version: '2.4'
来代替(我不使用 Swarm)。 如果我要编写一些使用 Compose 规范特定功能的内容,那么我可能会写
version: '4'
来指示差异;我在其他地方的经验是这些类型的版本标记往往很有用。

截至 2023 年 5 月撰写本文时,Docker 计划在 2023 年 6 月底之前停止支持 Python 版本的 Compose,这将减少此矩阵中的选项数量。 特别是,这意味着

version:
行始终被忽略,并且任何文件都将根据 Compose 规范进行解释,而不是旧的文件格式之一。


3
投票

顶级 version 属性由向后兼容性规范定义,但仅提供信息(https://docs.docker.com/compose/compose-file/04-version-and-name/

向后兼容性可用于保留旧软件,否则当制造商决定停止支持旧硬件时,这些软件可能会丢失(https://en.wikipedia.org/wiki/Backward_compatibility)。


1
投票

https://docs.docker.com/compose/compose-file/04-version-and-name/

顶级版本属性由规范定义以实现向后兼容性,但仅提供信息。

它指定 compose 文件架构的版本,而不是 docker-compose 的版本。


0
投票

是dockercomposeryalm文件格式的版本。 每个版本都依赖于 Docker Engine 版本,它可以添加新参数或新变量。

在这里您可以看到它是如何变化的:https://docs.docker.com/compose/compose-file/compose-versioning/#version-3


0
投票

我发现这也很令人困惑,但幸运的是我们似乎不再需要担心 --

最近的 docker 文档提到它废弃了“版本顶级元素”。 https://docs.docker.com/reference/compose-file/version-and-name/

这意味着我们不需要在撰写文件的开头指定“版本”。相反,如果您使用的是更高版本的 Docker 并在 yaml 中指定“version”元素,终端中会弹出一条警告消息,要求您不要这样做。 warning msg

© www.soinside.com 2019 - 2024. All rights reserved.