Docker Compose 无法执行:“未找到命令‘docker-compose’”

yup*_*guy 14 server bash docker

我已在 Ubuntu Server 20.04 上以非 sudo 用户身份安装了最新的 Docker Compose,并使用以下命令在非 sudo 用户目录中安装了 docker-rootless 守护进程:

mkdir -p ~/.docker/cli-plugins/
curl -SL https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose
chmod +x ~/.docker/cli-plugins/docker-compose
Run Code Online (Sandbox Code Playgroud)

并通过以下方式验证安装是否成功:

$ docker compose version
Docker Compose version v2.2.3
Run Code Online (Sandbox Code Playgroud)

但是,每当我尝试执行我创建的docker-compose up -d文件时.yml,我都会得到以下输出:

$ docker-compose up -d
WARNING:root:could not open file '/etc/apt/sources.list.d/mongodb-org-5.0.list'

Command 'docker-compose' not found, but can be installed with:

snap install docker          # version 20.10.11, or
apt  install docker-compose  # version 1.25.0-1

See 'snap info docker' for additional versions.
Run Code Online (Sandbox Code Playgroud)

docker.sock尽管我的非 root 用户的文件包含~/.bashrc

export PATH=/usr/bin:$PATH
export DOCKER_HOST=unix:///run/user/1007/docker.sock
Run Code Online (Sandbox Code Playgroud)

如何让 Docker Compose 识别正确的docker.sock文件?

Art*_*ild 27

您在 Docker Compose 命令中犯了一个非常基本的错误。

Docker Compose V1 具有命令语法docker-composedocker-compose是一个单独的命令)。

Docker Compose V2 具有命令语法docker composecompose是命令的子命令docker)。

由于您已经安装了 Docker Compose V2 分支,因此您不能使用docker-compose up -d,而应该使用正确的 V2 语法:

docker compose up -d
Run Code Online (Sandbox Code Playgroud)

我假设大多数安装指令docker-compose在一段时间内仍将使用旧语法,直到 V2 变得更加主流。同时,如果您运行的是 V2,请记住替换为新语法。

如果您想保留与旧语法的兼容性,您可以创建如下别名:

alias docker-compose='docker compose'
Run Code Online (Sandbox Code Playgroud)

这应该适用于大多数情况。

有关新 V2 语法的参考,请参阅此处。

  • 文档中有错误。他们解释了如何安装版本二,但在入门部分仍然使用 docker-compose:https://docs.docker.com/compose/gettingstarted/#step-4-build-and-run-your-app-with -撰写 (3认同)
  • 感谢您节省了大量时间。 (2认同)