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

Moh*_*awo 5 django version docker docker-compose

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

version: '3.9'
Run Code Online (Sandbox Code Playgroud)

这到底是什么意思?!

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

docker-compose --version
Run Code Online (Sandbox Code Playgroud)

输出是:

Docker Compose version v2.17.2
Run Code Online (Sandbox Code Playgroud)

那么我们如何输入3.9第一行呢?

Dav*_*aze 10

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

Compose 工具有两种不同的实现,一种是用 Python 编写的(docker-compose带有连字符),另一种是用 Go 编写并作为 Docker 扩展分发(docker compose带有空格)。您的输出Docker Compose version v2...意味着您正在使用较新的 Go-plugin 版本的 Compose。

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

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

特别是,请参阅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 规范进行解释,而不是旧的文件格式之一。