Search code examples
docker-composedebian-based

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 https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(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.


Solution

  • 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 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)
    

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

    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