ChatGPT解决这个技术问题 Extra ChatGPT

如何将 docker-compose 升级到最新版本

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

sudo apt install docker-compose

它安装了 docker-compose 1.8.0 版并构建未知

我需要最新版本的 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

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

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

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

sudo apt install docker-compose

请让我知道我现在应该怎么做才能卸载并重新安装 docker-compose。


H
Hexile

首先,删除旧版本:

如果通过 apt-get 安装

sudo apt-get remove docker-compose

如果通过 curl 安装

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

如果通过 pip 安装

pip uninstall docker-compose

然后the release page at GitHub 上找到最新版本,或者通过 curl API 并使用 grepjq 从响应中提取版本(感谢 dragon788frbl 和 {4 } 对于这些改进):

# 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

尝试更新 /usr/local/bin/docker-compose 中的路径,然后运行 sudo chmod +x /usr/bin/docker-compose
无需移动文件。 /usr/local/bin 路径应该已经在 $PATH 中。只需 chmod 到位。答案已更新以反映这一点。
您可能想做 sudo chmod 755 $DESTINATION 而不仅仅是 +x
尼奥,很好的收获。我通常只是根据我的需要调整烫发,以防其他事情按照他们的需要设置。但在这里我们正在下载一个新文件。设置所有烫发是有道理的。
@Rebar您能否更具体地说明您希望将路径更新为什么? /usr/local/bin 是放置不受打包系统管理的全局二进制文件的标准位置。答案还提到指定“您最喜欢的 $PATH 可访问位置”,这表明如果您的 $PATH 不同,则进行调整。
j
jonashackt

为 Docker Compose 安装和升级方法提供永久且可持续的解决方案的最简单方法是使用 package manager pip

pip install docker-compose

我正在为丑陋的“如何升级到最新版本号”问题寻找一个好的解决方案,该问题是在您阅读官方文档后出现的 - 只是偶尔发现它 - 看看 docker-compose pip package -它应该(主要)反映 latest released Docker Compose version 的当前数量。

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


+1 好答案。之前:我有 docker-compose 版本:docker-compose 版本 1.21.2,构建 a133471 所以要升级到最新的非 RC 版本,我发现这可以升级:1)apt install python-pip 安装 PIP 然后 {2 } 安装最新版本,然后检查版本:docker-compose --version 这给了我:docker-compose version 1.23.2, build 1110ad0
pip install docker-compose 给了我“要求已经满足:docker-compose”,所以我必须执行 apt-get purge docker-composehash -d docker-compose 然后 pip install docker-compose 才能在 Ubuntu 18.04 上获得 docker-compose 1.24。
通过 pip 安装 docker-compose 后,我遇到了这个错误:ImportError: cannot import name 'Context'
所以,为了处理这个错误,我重新安装了 pipdocker
D
DependencyHell

如果您尝试 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

下载最新版本(查看官方仓库: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

执行此操作后,我收到此错误 - bash: /usr/bin/docker-compose: No such file or directory
k
kpratihast

如果上述方法不适合您,请参考此答案: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

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
@Luuklag 更新了答案。感谢您的建议
这似乎是一个非常慢的选择
这是迄今为止最好的解决方案,只需要更改版本号,我就能在一分钟内更新 docker-compose!关于@TeoTN 发表的评论——这根本不是一个缓慢的选择,它只取决于你的互联网速度,因为它直接下载 docker-compose 二进制文件。
f
frbl

根据@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 获取最新版本。


我在第 4 行遇到错误:zsh: parse error near )'`
刚刚在这里测试过,但它似乎工作正常(debian 10 with zsh)。你确定你复制正确?
尝试对 URL 进行双引号,因为有时 shell 可能会有点抢手。
J
Jakob Eriksson

这是另一个使用 curl 和 sed 安装最新版本 docker-compose 的 oneliner。

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

这应该是正确答案!最简单/简短和有用的解决方案!
执行此操作后,我收到此错误 - bash: /usr/bin/docker-compose: No such file or directory
@martinho 我在 Ubuntu 20.04 上遇到了同样的问题,我必须注销并登录才能让它工作。
r
ranit

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

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

sudo apt-get 删除 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

检查你的版本

码头工人撰写--版本


D
David Buck

我试图在“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

我认为 1 行命令仍应从 root 工作
C
Community

从命令行使用它: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

0
0074b60ae

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

 pip install --upgrade docker-compose

或者正如 Mariyo 明确指出的 pip3 :

 pip3 install --upgrade docker-compose

在我的情况下是pip3 install --upgrade docker-compose
M
Mohammad Mostafavi

在 url 中使用 latest 标志会将您重定向到最新版本的 repo

由于 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

m
martinho

利用,

$ 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

Y
Yakir GIladi Edry

在 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


M
Muhammad Irfan Aslam

更新 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


d
dragon788

经过大量寻找执行此操作的方法后,我最终使用了 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

H
Harry

在 ubuntu 桌面 18.04.2 上,使用 curl 命令安装软件包时,我从路径中删除了“本地”,它对我有用。请参阅 Kshitij 的上述回答。


H
Henrique Holtz

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

sudo apt update

接着:

sudo apt upgrade


h
hitshy_dev

Docker 引擎和 Docker Compose 插件

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

安装准备

更新你的镜像:

sudo apt-get update

确保安装了以下软件包:

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

之后添加官方的 Docker GPG 密钥:

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 Engine 和其他需要的依赖项:

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

docker compose 插件的安装

sudo apt-get install docker-compose-plugin

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


F
Full Array

Centos/RHEL

如果您使用的是 x86-64 架构的 Centos7,请按照我的回答进行操作。这个答案也可以在我的 github 中找到。

停止 Docker 容器

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

更新 Docker-Compose 的选项

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

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

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

示范

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

像这样:

chmod +x update_docker_compose.sh

“docker_docker_compose.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

docker images output

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

cd /home/username/script

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

./update_docker_compose.sh

选项 2

创建脚本文件名“update_docker_compose.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

docker images output

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

cd /home/username/script

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

./update_docker_compose.sh

R
R0bertinski

好吧,我的情况很奇怪。我正在使用 wsl2 和 Docker Desktop (Windows 11)。将文件夹“docker”重命名为“config-dev-server”并像这样更新 de Dockerfile 后,我不再收到此错误:

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

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

K
Kristian Mandrup

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

$ brew install docker-compose

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


B
Bat Man

这些解决方案中的大多数都已过时或使您安装旧版本。安装最新的

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

a
ajeetraina

使用更新的 Docker Desktop for Mac 3.3.0,您无需将 Docker Compose 作为单独的包安装。默认情况下,Docker Compose 是随 Docker 一起安装的一等公民。查看以下 CLI:


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