我已经使用命令安装了docker-compose

Sudo apt安装docker-compose

它安装了docker-compose版本1.8.0和build unknown

我需要docker-compose的最新版本或至少1.9.0版本

任何人都可以让我知道我应该采取什么方法来升级它或卸载并重新安装最新版本。

我已经检查了docker网站,可以看到他们推荐安装最新版本'

sudo curl - l https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

但在此之前,我必须卸载当前版本,这可以使用命令来完成

执行rm /usr/local/bin/docker-compose

但是这只能在使用curl完成安装时使用。我不确定安装是否像我使用的那样由curl完成

Sudo apt安装docker-compose

请让我知道我现在应该做什么来卸载和重新安装docker-compose。


首先,删除旧版本:

如果通过apt-get安装

sudo apt-get remove docker-compose

如果通过curl安装

sudo rm /usr/local/bin/docker-compose

如果通过pip安装

pip uninstall docker-compose

然后在GitHub的发布页面上找到最新版本,或者通过卷曲API并使用grep或jq从响应中提取版本(感谢dragon788, frbl和Saber Hayati的这些改进):

# curl + grep
VERSION=$(curl --silent https://api.github.com/repos/docker/compose/releases/latest | grep -Po '"tag_name": "\K.*\d')

# curl + jq
VERSION=$(curl --silent https://api.github.com/repos/docker/compose/releases/latest | jq .name -r)

最后,下载到您最喜欢的$ path可访问的位置,并设置权限:

DESTINATION=/usr/local/bin/docker-compose
sudo curl -L https://github.com/docker/compose/releases/download/${VERSION}/docker-compose-$(uname -s)-$(uname -m) -o $DESTINATION
sudo chmod 755 $DESTINATION

为Docker Compose安装提供永久和可持续的解决方案以及升级它的最简单的方法是使用包管理器pip with:

pip install docker-compose

我正在为“如何升级到最新版本号”这个丑陋的问题寻找一个好的解决方案,这个问题出现在你阅读官方文档之后-只是偶尔发现它-看看Docker - Compose pip包-它应该反映(大部分)最新发布的Docker Compose版本的当前编号。

如果涉及到管理软件安装,包管理器总是最好的解决方案!所以你可以从自己处理的版本中抽象出来。


如果以上方法对你不起作用,那么参考这个答案:https://stackoverflow.com/a/40554985

curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" > ./docker-compose
sudo mv ./docker-compose /usr/bin/docker-compose
sudo chmod +x /usr/bin/docker-compose

基于@eric-johnson的回答,我目前正在一个脚本中使用这个:

#!/bin/bash
compose_version=$(curl https://api.github.com/repos/docker/compose/releases/latest | jq .name -r)
output='/usr/local/bin/docker-compose'
curl -L https://github.com/docker/compose/releases/download/$compose_version/docker-compose-$(uname -s)-$(uname -m) -o $output
chmod +x $output
echo $(docker-compose --version)

它从GitHub api获取最新版本。


从命令行使用:sudo curl - l "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)"- o /usr/local/bin/docker-compose

写下最新版本

对二进制文件应用可执行权限:

sudo chmod +x /usr/local/bin/docker-compose

然后测试版本:

$ docker-compose --version

在研究了很多方法之后,我最终使用了jq,希望我可以扩展它来处理Docker-Compose之外的其他回购,而不需要太多的工作。

# If you have jq installed this will automatically find the latest release binary for your architecture and download it
curl --silent "https://api.github.com/repos/docker/compose/releases/latest" | jq --arg PLATFORM_ARCH "$(echo `uname -s`-`uname -m`)" -r '.assets[] | select(.name | endswith($PLATFORM_ARCH)).browser_download_url' | xargs sudo curl -L -o /usr/local/bin/docker-compose --url

如果你有自制软件,你也可以通过brew安装

$ brew install docker-compose

这是在Mac OS系统上安装的好方法


下面是另一个使用curl和sed安装最新版本docker-compose的联机程序。

curl -L "https://github.com/docker/compose/releases/download/`curl -fsSLI -o /dev/null -w %{url_effective} https://github.com/docker/compose/releases/latest | sed 's#.*tag/##g' && echo`/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose

在ubuntu desktop 18.04.2上,当我使用curl命令安装包时,我从路径中删除了“local”,它为我工作。参见Kshitij的回答。


如果你尝试sudo apt-get remove docker-compose并得到E: Unable to locate package docker-compose,请尝试以下方法:

这个命令必须返回一个结果,以便检查它是否安装在这里:

ls -l /usr/local/bin/docker-compose

删除旧版本:

sudo rm -rf docker-compose

下载最新版本(查看官方repo: docker/compose/releases):

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

(如有需要,替换1.24.0)

最后,对二进制文件应用可执行权限:

sudo chmod +x /usr/local/bin/docker-compose

检查版本:

docker-compose -v

如果你安装了pip,升级你可以使用:

 pip install --upgrade docker-compose

或者像Mariyo在pip3中明确指出的那样:

 pip3 install --upgrade docker-compose

我试图在“Ubuntu 16.04.5 LTS”上安装docker-compose,但安装后像这样:

sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

我得到:

-bash: /usr/local/bin/docker-compose:拒绝权限

当我使用它与sudo我得到:

Sudo: docker-compose:命令不存在

下面是我解决问题的步骤:

sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
sudo chmod +x /usr/bin/docker-compose

分三步做。(显示apt-get安装)

卸载最后一个。例如,apt-get安装

Sudo apt-get remove docker-compose

安装新版本(https://docs.docker.com/compose/install/)

sudo curl - l "https://github.com/docker/compose/releases/download/1.29.0/docker-compose-$(uname -s)-$(uname -m)"- o /usr/local/bin/docker-compose

然后

Sudo chmod +x /usr/local/bin/docker-compose

检查你的版本

docker-compose——版本


这些解决方案大多已经过时,或者让您安装旧版本。 安装最新版本

sudo apt  install jq

DOCKER_COMPOSE_VERSION=$(curl --silent https://api.github.com/repos/docker/compose/releases/latest | jq .name -r)

sudo curl -L "https://github.com/docker/compose/releases/download/$DOCKER_COMPOSE_VERSION/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

使用更新的Mac 3.3.0 Docker Desktop,你不需要将Docker Compose作为一个单独的包安装。Docker Compose作为Docker默认安装的一等公民。看看下面的CLI:


docker compose version
Docker Compose version 2.0.0-beta.1%

Use,

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose

$ docker-compose -v

更新docker-compose的简单解决方案

这将删除docker-compose的现有二进制文件并安装一个新版本。

sudo cd /usr/local/bin && sudo rm -rf docker-compose
sudo sudo curl -SL https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
sudo chmod +x docker-compose

要获得最新版本,请访问https://github.com/docker/compose/releases并将最新版本替换为v2.1.1


在url中使用latest标志将重定向到回购的最新版本

由于操作系统名称在github的文件名中是小写,您应该使用sed -e 's/\(.*\)/\L\1/'将uname -s转换为小写。

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s|sed -e 's/\(.*\)/\L\1/')-$(uname -m)" -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose

在我的情况下,使用Windows + WSL2和Ubuntu 20.04,只需要这样:

Sudo apt更新

然后:

Sudo apt升级


在mac上(也适用于ubuntu):

sudo curl -L "https://github.com/docker/compose/releases/download/<release-version>/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

注意:写在这里: https://github.com/docker/compose/releases


Docker引擎和Docker撰写插件

自从微软接管Docker后,他们一直致力于将Docker -compose移植到Docker Engine CLI插件中。对于未来的支持和更新,我建议使用docker compose plugin(注意没有破折号),它可以通过docker-compose-plugin包安装。以下说明假设您使用Ubuntu作为发行版或任何使用apt作为包管理器的发行版。

安装准备工作

更新你的镜像:

sudo apt-get update

请确保已安装以下软件包:

sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

之后添加官方Docker GPG Key:

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

最后添加稳定库:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

同时确保安装了Docker引擎和其他需要的依赖项:

sudo apt-get install docker-ce docker-ce-cli containerd.io

安装docker合成插件

sudo apt-get install docker-compose-plugin

插件的任何未来更新都可以通过apt轻松应用。 为了进一步参考,请查看Docker Engine和Docker Compose的官方安装说明。


Centos / RHEL

如果您正在使用x86-64架构的Centos7,请遵循下面我的回答。这个答案也可以在我的github中找到。

停止你的Docker容器

我注意到其他答案并没有谈到在尝试优雅地升级之前停止docker容器/图像实例。假设是不可避免的,但代价可能很高。我们继续前进!

更新Docker-Compose的选项

如果您首先使用Curl命令下载并安装docker-compose,则有两个选项可以升级docker-compose。

使用Curl、jq包和Github的直接URL到docker-compose存储库。 使用Curl、Sed和Github的直接URL到docker-compose存储库。

注意:下面的一些命令需要“sudo”权限。

示范

下面的脚本被保存到一个名为“update_docker_composition .sh”的文件中。您需要赋予该文件可执行权限。

像这样:

chmod +x update_docker_compose.sh

docker_docker_composition .sh文件内容:

#!/bin/bash

# author: fullarray (stackoverflow user)
# Contribution shared on: stackoverflow.com
# Contribution also available on: github.com
# date: 06112022

# Stop current docker container running
docker stop containerID

# Remove current docker network running
docker rm containerID

# Remove image of target application(s)
docker image rm imageID

# Delete either dangling (unatagged images) docker containers or images or network
docker system prune -f

# This step depends on the jq package. 
# Uncomment jq package installation command below if using Centos7 x86-64.
# sudo yum install jq

# Declare variable to get latest version of docker-compose from github repository
compose_version=$(curl https://api.github.com/repos/docker/compose/releases/latest | jq .name -r)

# Declare variable to target installation directory
target_install_dir='/usr/local/bin/docker-compose'

# Get OS and build (assumes Linux Centos7 and x86_64)
get_local_os_build=$(uname -s)-$(uname -m)

# Execute curl command to carry download and installation operation
curl -L https://github.com/docker/compose/releases/download/$compose_version/docker-compose-$get_local_os_build -o $target_install_dir

# Use chmod to modify permissions to target installation directory (to make it executable)
chmod +x $target_install_dir

# Print docker-compose version to terminal to verify upgrade
$(docker-compose --version)

使用特定于您的环境的变量编辑脚本

上面的脚本有几个变量,您需要使用特定于docker环境的值进行编辑。例如,您需要将容器ID和映像ID替换为以下命令输出的值。

docker ps

and

docker images output

一旦您完成了文件的创建(包括编辑)。切换到包含该文件的目录。例如,如果您在/home/username/script/update_docker_compose.sh中创建文件

cd /home/username/script

最后,执行以下命令运行脚本

./update_docker_compose.sh

选项2

创建一个名为update_docker_composition .sh的脚本文件

编辑文件,添加如下内容:

#!/bin/bash

# author: fullarray (stackoverflow user)
# Contribution shared on: stackoverflow.com
# Contribution also available on: github.com
# date: 06112022

# Stop current docker container running
docker stop containerID

# Remove current docker network running
docker rm containerID

# Remove image of target application(s)
docker image rm imageID

# Delete either dangling (unatagged images) docker containers or images or network
docker system prune -f

# Declare variable to target installation directory
target_install_dir='/usr/local/bin/docker-compose'

# Get OS and build (assumes Linux Centos7 and x86_64)
get_local_os_build=$(uname -s)-$(uname -m)

# Execute curl and sed command to carry out download and installation operation
# compose_latest_version=$(curl -L "https://github.com/docker/compose/releases/download/`curl -fsSLI -o /dev/null -w %{url_effective} https://github.com/docker/compose/releases/latest | sed 's#.*tag/##g' && echo`/docker-compose-$get_local_os_build") -o $target_install_dir

# Use chmod to modify permissions to target installation directory (to make it executable)
chmod +x $target_install_dir

# Print docker-compose version to terminal to verify upgrade
$(docker-compose --version)

使用特定于您的环境的变量编辑脚本

上面的脚本还有一些变量,您需要使用特定于docker环境的值进行编辑。例如,您需要将容器ID和映像ID替换为以下命令输出的值。

docker ps

and

docker images output

一旦您完成了文件的创建(包括编辑)。切换到包含该文件的目录。例如,如果您在/home/username/script/update_docker_compose.sh中创建文件

cd /home/username/script

最后,执行以下命令运行脚本

./update_docker_compose.sh

我的案子很奇怪。我使用wsl2和Docker Desktop (Windows 11)。在将文件夹“docker”重命名为“config-dev-server”并像这样更新Dockerfile后,我停止得到这个错误:

COPY ./docker/apache/apache2.conf /etc/apache2/apache2.conf

to

COPY ./config-dev-server/apache/apache2.conf /etc/apache2/apache2.conf

这是安装docker compose 2.12.x版本的方法

更新debian包管理器

# apt-get update
# apt-get install docker-compose-plugin

然后手动安装插件

 DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
 mkdir -p $DOCKER_CONFIG/cli-plugins
 curl -SL https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose

给予文件执行的许可

chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose

最后一次安装测试

docker compose version
// Docker Composer Version v2.12.2