注意:此问题是在 Docker 文档更新之前创建的(这也是它们被更新的原因 - 请参见this答案)。请不要发布指出差异文档的答案 :-)
我一直在使用docker-compose
,但是注意到还有一个没有破折号的docker compose
。
通过谷歌搜索,我无法快速确定这两种形式之间的区别。
有人知道吗?
docker compose
的帮助:
docker-compose
的帮助信息:
注意:此问题是在 Docker 文档更新之前创建的(这也是它们被更新的原因 - 请参见this答案)。请不要发布指出差异文档的答案 :-)
我一直在使用docker-compose
,但是注意到还有一个没有破折号的docker compose
。
通过谷歌搜索,我无法快速确定这两种形式之间的区别。
有人知道吗?
docker compose
的帮助:
docker-compose
的帮助信息:
docker compose
(有空格)是将compose迁移到Go语言的docker项目中的较新项目。这是docker/compose仓库的v2
分支。它首先向Docker桌面用户介绍,因此Linux上的docker用户没有看到该命令。除了迁移到Go语言外,它还使用了compose-spec,并且重写的一部分可能导致行为差异。docker-compose
,也就是docker/compose仓库的v1版本,现已被弃用,并且开发工作已转移到v2版本。要在Linux上将v2 docker compose
安装为CLI插件,受支持的发行版现在可以安装docker-compose-plugin
软件包。例如,在Debian上,我运行apt-get install docker-compose-plugin
。
sudo pacman -S docker
- Robindocker/compose-cli项目处于一个中间状态,它在docker-cli Linux软件包的上游版本中不可用,但已包含在Docker Desktop中。文档页面通常遵循docker/cli中的内容,因此提前将其发布到Desktop会使文档处于困境。我将与Docker团队讨论此问题,看他们如何处理。
更新:来自docker的github问题:
gtardif于2天前发表评论
compose命令参考文档现已上线
docker-compose
命令,现在这些命令失败了。我发现设置一个新命令的别名是有用的: alias docker-compose='docker compose'
。 - i01573version: "3"
services:
wordpress:
image: wordpress
container_name: "${COMPOSE_PROJECT_NAME}_wordpress"
env_file:
- ${PWD}/.env
...
和本地实例 .env
文件:
# compose file location
COMPOSE_FILE=../templateFolder/docker-compose.yml
# this instance name
COMPOSE_PROJECT_NAME=foo
$PWD
提供当前路径,并由您当前的 shell 定义。 - M-Jackpwd
而是 PWD
。据我所知,在 docker-compose.yml 中无法调用 shell 函数。全大写字母表明它是一个环境变量。-- 编辑:好的,我尝试了一下,它确实可以工作。在这种情况下,我无法想象为什么 .env 文件会从不同的目录中获取。它的值将取决于 docker[-]compose 的调用位置,不是吗? - MDickten引用自 https://docs.docker.com/compose/#compose-v2-and-the-new-docker-compose-command
注:该链接为英文原文,需要进行翻译。Compose V2 and the new docker compose command
Important
The new Compose V2,
which supports the compose command as part of the Docker CLI, is now available.
Compose V2 integrates compose functions into the Docker platform,
continuing to support most of the previous docker-compose features and flags.
You can run Compose V2 by replacing the hyphen (-) with a space,
using docker compose, instead of docker-compose.
docker
安装中还没有包含docker compose
,则可以将其作为CLI插件安装在Linux上。COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r '.tag_name')
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/$COMPOSE_VERSION/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
请查看https://docs.docker.com/compose/cli-command/#installing-compose-v2。
如果您不想进行更改,但希望保留原始的遗留docker-compose
功能,也称为Compose独立版与Compose插件版,则可以执行以下操作:
# Run as root
VERSION=v2.12.2
curl -SL https://github.com/docker/compose/releases/download/$VERSION/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod a+x /usr/local/bin/docker-compose
# Test it
docker-compose
这允许您在shell脚本中继续使用docker-compose
等工具。
两者之间的另一个显著区别是如何生成Docker镜像标签。对于这两个命令,镜像标签是由COMPOSE_PROJECT_NAME环境变量(如果未设置,则为项目目录名称)和compose文件中的name
值连接而成。对于旧版的docker-compose
命令,名称将附加到带有下划线的COMPOSE_PROJECT_NAME后面,但新版的docker compose
命令会使用连字符/破折号-
将两者连接起来。
考虑compose文件:
services:
web:
build: ./webapp
docker-compose build web
将生成docker.io/library/my_proj_web
docker compose build web
将生成docker.io/library/my_proj-web
docker compose
是docker
可执行文件的compose
子命令(该列表 https://docs.docker.com/engine/reference/commandline/docker/ 中不存在)。docker-compose
是一个独立的可执行文件:https://docs.docker.com/compose/reference/overview/。 - jonrsharpecompose
子命令没有列在子命令文档中。让我们看看回应是什么。 - Veverke