我已经使用命令安装了 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。
首先,删除旧版本:
如果通过 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 和 {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
为 Docker Compose 安装和升级方法提供永久且可持续的解决方案的最简单方法是使用 package manager pip:
pip install docker-compose
我正在为丑陋的“如何升级到最新版本号”问题寻找一个好的解决方案,该问题是在您阅读官方文档后出现的 - 只是偶尔发现它 - 看看 docker-compose pip package -它应该(主要)反映 latest released Docker Compose version 的当前数量。
如果涉及到管理软件安装,包管理器始终是最佳解决方案!所以你只是从自己处理版本中抽象出来。
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-compose
和 hash -d docker-compose
然后 pip install docker-compose
才能在 Ubuntu 18.04 上获得 docker-compose 1.24。
ImportError: cannot import name 'Context'
pip
的 docker
包
如果您尝试 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
如果上述方法不适合您,请参考此答案: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 获取最新版本。
zsh: parse error near
)'`
这是另一个使用 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
分三步进行。 (显示 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
检查你的版本
码头工人撰写--版本
我试图在“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
从命令行使用它: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
如果你安装了 pip,升级你可以使用:
pip install --upgrade docker-compose
或者正如 Mariyo 明确指出的 pip3 :
pip3 install --upgrade docker-compose
pip3 install --upgrade docker-compose
在 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
利用,
$ 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
在 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-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
经过大量寻找执行此操作的方法后,我最终使用了 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
在 ubuntu 桌面 18.04.2 上,使用 curl 命令安装软件包时,我从路径中删除了“本地”,它对我有用。请参阅 Kshitij 的上述回答。
在我的情况下,使用带有 Ubuntu 20.04 的 Windows + WSL2,只需要这样做:
sudo apt update
接着:
sudo apt upgrade
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 Engine 和 Docker Compose 的官方安装说明。
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
好吧,我的情况很奇怪。我正在使用 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
如果您有自制软件,您也可以通过 brew
安装
$ brew install docker-compose
这是在 Mac OS 系统上安装的好方法
这些解决方案中的大多数都已过时或使您安装旧版本。安装最新的
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
使用更新的 Docker Desktop for Mac 3.3.0,您无需将 Docker Compose 作为单独的包安装。默认情况下,Docker Compose 是随 Docker 一起安装的一等公民。查看以下 CLI:
docker compose version
Docker Compose version 2.0.0-beta.1%
sudo chmod +x /usr/bin/docker-compose
/usr/local/bin
路径应该已经在$PATH
中。只需chmod
到位。答案已更新以反映这一点。sudo chmod 755 $DESTINATION
而不仅仅是+x
/usr/local/bin
是放置不受打包系统管理的全局二进制文件的标准位置。答案还提到指定“您最喜欢的 $PATH 可访问位置”,这表明如果您的$PATH
不同,则进行调整。