How to upgrade docker-compose to latest version

I have installed docker-compose using the command

sudo apt install docker-compose

It installed docker-compose version 1.8.0 and build unknown

I need the latest version of docker-compose or at least a version of 1.9.0

Can anyone please let me know what approach I should take to upgrade it or uninstall and re-install the latest version.

I have checked the docker website and can see that they are recommending this to install the latest version'

sudo curl -L (uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

But before that, I have to uninstall the present version, which can be done using the command

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

but this can be used only when the installation was done using curl. I am not sure if the installation was done by curl as I have used

sudo apt install docker-compose

Please let me know what should I do now to uninstall and re-install the docker-compose.

0

22 Answers

First, remove the old version:

If installed via apt-get

sudo apt-get remove docker-compose 

If installed via curl

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

If installed via pip

pip uninstall docker-compose 

Then find the newest version on the release page at GitHub or by curling the API and extracting the version from the response using grep or jq (thanks to dragon788, frbl, and Saber Hayati for these improvements):

# curl + grep VERSION=$(curl --silent | grep -Po '"tag_name": "\K.*\d') # curl + jq VERSION=$(curl --silent | jq .name -r) 

Finally, download to your favorite $PATH-accessible location and set permissions:

DESTINATION=/usr/local/bin/docker-compose sudo curl -L (uname -s)-$(uname -m) -o $DESTINATION sudo chmod 755 $DESTINATION 
19

The easiest way to have a permanent and sustainable solution for the Docker Compose installation and the way to upgrade it, is to just use the package manager pip with:

pip install docker-compose 

I was searching for a good solution for the ugly "how to upgrade to the latest version number"-problem, which appeared after you´ve read the official docs - and just found it occasionally - just have a look at the docker-compose pip package - it should reflect (mostly) the current number of the latest released Docker Compose version.

A package manager is always the best solution if it comes to managing software installations! So you just abstract from handling the versions on your own.

4

If you tried sudo apt-get remove docker-compose and get E: Unable to locate package docker-compose, try this method :

This command must return a result, in order to check it is installed here :

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

Remove the old version :

sudo rm -rf docker-compose 

Download the last version (check official repo : docker/compose/releases) :

sudo curl -L "(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 

(replace 1.24.0 if needed)

Finally, apply executable permissions to the binary:

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

Check version :

docker-compose -v 
1

If the above methods aren't working for you, then refer to this answer:

curl -L "(uname -s)-$(uname -m)" > ./docker-compose sudo mv ./docker-compose /usr/bin/docker-compose sudo chmod +x /usr/bin/docker-compose 
3

Based on @eric-johnson's answer, I'm currently using this in a script:

#!/bin/bash compose_version=$(curl | jq .name -r) output='/usr/local/bin/docker-compose' curl -L (uname -s)-$(uname -m) -o $output chmod +x $output echo $(docker-compose --version) 

it grabs the latest version from the GitHub api.

3

Here is another oneliner to install the latest version of docker-compose using curl and sed.

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

Do it in three steps. (showing for apt-get installs)

  1. Uninstall the last one. e.g. for apt-get installs

sudo apt-get remove docker-compose

  1. Install the new one ()

sudo curl -L "(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

and then

 sudo chmod +x /usr/local/bin/docker-compose 
  1. Check your version

docker-compose --version

I was trying to install docker-compose on "Ubuntu 16.04.5 LTS" but after installing it like this:

sudo curl -L "(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 

I was getting:

-bash: /usr/local/bin/docker-compose: Permission denied

and while I was using it with sudo I was getting:

sudo: docker-compose: command not found

So here's the steps that I took and solved my problem:

sudo curl -L "(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

use this from command line: sudo curl -L "(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Write down the latest release version

Apply executable permissions to the binary:

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

Then test version:

$ docker-compose --version 

If you installed with pip, to upgrade you can just use:

 pip install --upgrade docker-compose 

or as Mariyo states with pip3 explicitly:

 pip3 install --upgrade docker-compose 
1

Using latest flag in url will redirect you to the latest release of the repo

As OS name is lower case in github's filename, you should convert uname -s to lower case using sed -e 's/\(.*\)/\L\1/'.

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

Use,

$ sudo curl -L "(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose $ docker-compose -v 

After a lot of looking at ways to perform this I ended up using jq, and hopefully I can expand it to handle other repos beyond Docker-Compose without too much work.

# If you have jq installed this will automatically find the latest release binary for your architecture and download it curl --silent "" | 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 

On ubuntu desktop 18.04.2, I have the 'local' removed from the path when using the curl command to install the package and it works for me. See above answer by Kshitij.

In my case, using Windows + WSL2 with Ubuntu 20.04, was necessary only this:

sudo apt update

and then:

sudo apt upgrade

On mac (also working on ubuntu):

sudo curl -L "(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose 

NOTE: write the as here:

Simple Solution to update docker-compose

This will remove the existing binary of docker-compose and install a new version.

sudo cd /usr/local/bin && sudo rm -rf docker-compose sudo sudo curl -SL -o /usr/local/bin/docker-compose sudo chmod +x docker-compose 

for the latest version visit and replace the latest one with v2.1.1

Docker Engine and Docker Compose Plugin

Since Microsoft took over Docker they worked on porting docker-compose to their Docker Engine CLI plugins. For future support and updates I would recommend using docker compose plugin (Notice the missing dash) which can be install via the docker-compose-plugin package. The following instructions assume that you are using Ubuntu as Distro or any Distro thats using apt as package manager.

Installation Preparations

Update your mirrors:

sudo apt-get update 

Make sure the following packages are installed:

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

After that add the official Docker GPG Key:

sudo mkdir -p /etc/apt/keyrings curl -fsSL | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg 

And finally add the the stable repository:

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

Also make sure Docker Engine and other needed dependencies are installed:

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

Installation of docker compose plugin

sudo apt-get install docker-compose-plugin 

Any future updates of the plugin are easily applied via apt.
For further reference take a look at the official installation instructions of Docker Engine and Docker Compose.

Centos/RHEL

Follow my answer below if you're using Centos7 with an x86-64 architecture. This answer is also available in my github.

Stop Your Docker Containers

I noticed other answers did not talk about stopping your docker containers/images instances before attempting to upgrade gracefully. Assumptions are inevitable but can be costly. Onward we go!

Options to update Docker-Compose

There are 2 options to upgrade docker-compose if you first downloaded and installed docker-compose using the Curl command.

  1. Using Curl, jq package, and Github's direct URL to the docker-compose repository.
  2. Using Curl, Sed, and Github's direct URL to the docker-compose repository.

Note: some of the commands below require "sudo" privileges.

Demonstration

The script below was saved to a file called "update_docker_compose.sh". You need to give this file executable permissions.

Like so:

chmod +x update_docker_compose.sh 

"docker_docker_compose.sh" file content:

#!/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 | 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 -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) 

Edit the script with variables specific to your environment

The script above has a few variables you need to edit with values specific to your docker environment. For instance, you need to replace container ID and image ID with the values that the following commands output.

docker ps 

and

docker images output 

Once you finalize creating the file (including the edits). Switch to the directory that contains the file. For example, if you created the file in /home/username/script/update_docker_compose.sh

cd /home/username/script 

Last, run the script by executing the following

./update_docker_compose.sh 

Option 2

Create a script file name "update_docker_compose.sh"

Edit the file and add the following content:

#!/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 " -fsSLI -o /dev/null -w %{url_effective} | 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) 

Edit the script with variables specific to your environment

The script above also has a few variables you need to edit with values specific to your docker environment. For instance, you need to replace container ID and image ID with the values that the following commands output.

docker ps 

and

docker images output 

Once you finalize creating the file (including the edits). Switch to the directory that contains the file. For example, if you created the file in /home/username/script/update_docker_compose.sh

cd /home/username/script 

Last, run the script by executing the following

./update_docker_compose.sh 

If you have homebrew you can also install via brew

$ brew install docker-compose 

This is a good way to install on a Mac OS system

Most of these solutions are outdated or make you install old version. To install the latest

sudo apt install jq DOCKER_COMPOSE_VERSION=$(curl --silent | jq .name -r) sudo curl -L "(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose 

With a newer Docker Desktop for Mac 3.3.0, you don't need to install Docker Compose as a seperate package. Docker Compose comes as a first class citizen installed with Docker by default. Check out the below CLI:

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

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like