How to rebuild and update a container without downtime with docker-compose?
from the manual docker-compose restart
If you make changes to your docker-compose.yml configuration these changes will not be reflected after running this command.
you should be able to do
$docker-compose up -d --no-deps --build <service_name>
The --no-deps
will not start linked services.
Use the --build
flag to the up
command, along with the -d
flag to run your containers in the background:
docker-compose up -d --build
This will rebuild all images defined in your compose file, then restart any containers whose images have changed.
-d
assumes that you don't want to keep everything running in your shell foreground. This makes it act more like restart
, but it's not required.
The problem is that restart
will restart your current containers, which is not what you want.
As an example, I just did this
- change the docker file for one of the images
- call
docker-compose build
to build the images - call
docker-compose down
1 anddocker-compose up
docker-compose restart
will NOT work here- using
docker-compose start
instead also does not work
To be honest, i'm not completly sure you need to do a down
first, but that should be easy to check.1 The bottomline is that you need to call up
. You will see the containers of unchanged images restarting, but for the changed image you'll see recreating
.
The advantage of this over just calling up --build
is that you can see the building-process first before you restart.
1: from the comments; down is not needed, you can just call up --build
. Down has some "down"-sides, including possible being destructive to your (volume-)data.