如何将 docker-compose 升级到最新版本
Posted
技术标签:
【中文标题】如何将 docker-compose 升级到最新版本【英文标题】:How to upgrade docker-compose to latest version 【发布时间】:2018-09-25 02:44:11 【问题描述】:我已经使用命令安装了 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。
【问题讨论】:
【参考方案1】:首先,删除旧版本:
如果通过 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 并使用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
【讨论】:
尝试更新 /usr/local/bin/docker-compose 中的路径,然后运行sudo chmod +x /usr/bin/docker-compose
无需移动文件。 /usr/local/bin
路径应该已经在 $PATH
中。只需chmod
就位。已更新答案以反映这一点。
你可能想做sudo chmod 755 $DESTINATION
而不仅仅是+x
Neo,不错的收获。我通常只是根据我的需要调整烫发,以防其他事情按照他们的需要设置。但在这里我们正在下载一个新文件。设置所有权限是有意义的。
@Rebar 您能否更具体地说明您希望将路径更新为什么? /usr/local/bin
是放置不受打包系统管理的全局二进制文件的标准位置。答案还提到指定“您最喜欢的 $PATH 可访问位置”,这表示如果您的 $PATH
不同,请进行调整。【参考方案2】:
为 Docker Compose 安装和升级它提供永久且可持续的解决方案的最简单方法是使用 package manager pip 和:
pip install docker-compose
我正在为丑陋的“如何升级到最新版本号”问题寻找一个好的解决方案,该问题是在您阅读官方文档后出现的 - 只是偶尔发现它 - 只需看看 @ 987654322@ - 它应该反映(大部分)latest released Docker Compose version 的当前编号。
在管理软件安装方面,包管理器始终是最佳解决方案!所以你只是从自己处理版本中抽象出来。
【讨论】:
+1 好答案。之前:我有 docker-compose 版本:docker-compose 版本 1.21.2,构建 a133471 所以要升级到最新的非 RC 版本,我发现这可以升级:1)apt install python-pip
安装 PIP 然后@987654326 @ 安装最新版本然后检查版本:docker-compose --version
这给了我:docker-compose version 1.23.2, build 1110ad0
pip install docker-compose
给了我“要求已经满足:docker-compose”,所以我必须先做 apt-get purge docker-compose
和 hash -d docker-compose
然后 pip install docker-compose
才能在 Ubuntu 18.04 上获得 docker-compose 1.24。
通过pip安装docker-compose后遇到这个错误:ImportError: cannot import name 'Context'
所以,为了处理这个错误,我重新安装了docker
包pip
【参考方案3】:
如果你试过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【参考方案4】:根据@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)。你确定你复制的正确吗?
尝试双引号,因为有时 shell 会有点卡。【参考方案5】:
如果上述方法对您不起作用,请参考此答案:https://***.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 更新了答案。谢谢你的建议 这似乎是一个非常慢的选项【参考方案6】:这是另一个使用 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【参考方案7】:我试图在“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 工作【参考方案8】:分三步完成。 (显示 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 --version
【讨论】:
【参考方案9】:从命令行使用它: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
【讨论】:
【参考方案10】:如果你使用 pip 安装,升级你可以使用:
pip install --upgrade docker-compose
或者正如 Mariyo 明确指出的 pip3:
pip3 install --upgrade docker-compose
【讨论】:
在我的例子中是pip3 install --upgrade docker-compose
【参考方案11】:
在研究了很多执行此操作的方法后,我最终使用了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
【讨论】:
【参考方案12】:在 ubuntu 桌面 18.04.2 上,我在使用 curl 命令安装软件包时从路径中删除了“本地”,它对我有用。请参阅 Kshitij 的上述回答。
【讨论】:
【参考方案13】:使用,
$ 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
【讨论】:
【参考方案14】:在 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
【讨论】:
【参考方案15】:更新 docker-compose 的简单解决方案
这将删除 docker-compose 的现有二进制文件并安装新版本。
sudo cd /usr/local/bin && sudo rm -rf docker-compose
sudo wget https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64
sudo mv docker-compose-linux-x86_64 docker-compose
sudo chmod +x docker-compose
最新版本请访问https://github.com/docker/compose/releases 并将最新版本替换为 v2.1.1
【讨论】:
【参考方案16】:如果你有自制软件,你也可以通过brew
安装
$ brew install docker-compose
这是在 Mac OS 系统上安装的好方法
【讨论】:
【参考方案17】:这些解决方案中的大多数都已过时或要求您安装旧版本。 安装最新的
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
【讨论】:
【参考方案18】:使用更新的 Docker Desktop for Mac 3.3.0,您无需将 Docker Compose 作为单独的包安装。默认情况下,Docker Compose 是随 Docker 一起安装的一等公民。查看以下 CLI:
docker compose version
Docker Compose version 2.0.0-beta.1%
【讨论】:
以上是关于如何将 docker-compose 升级到最新版本的主要内容,如果未能解决你的问题,请参考以下文章
如何将正在运行的 Elasticsearch 旧实例升级到新版本?