Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Docker: Add a restart policy to a container that was already created

Tags:

docker

People also ask

How do I change the container restart policy?

Restart policy detailsA restart policy only takes effect after a container starts successfully. In this case, starting successfully means that the container is up for at least 10 seconds and Docker has started monitoring it. This prevents a container which does not start at all from going into a restart loop.

How do I reset an existing container?

To restart an existing container, we'll use the start command with the -a flag to attach to it and the -i flag to make it interactive, followed by either the container ID or name. Be sure to substitute the ID of your container in the command below: docker start -ai 11cc47339ee1.

Can you modify the container properties once the container is running?

You need to make your modified config files visible inside the container. If they are built into the image (possibly via COPY or ADD in the Dockerfile ), then restarting your container does not help, because you're doing it on an old image. You should be rebuilding the image, stopping the old one and starting the new.


In recent versions of docker (as of 1.11) you have an update command:

docker update --restart=always <container>

There're two approaches to modify RestartPolicy:

  • Find out the container ID, stop the whole docker service, modify /var/lib/docker/containers/CONTAINER_ID/hostconfig.json, set RestartPolicy -> Name to "always", and start docker service.
  • docker commit your container as a new image, stop & rm the current container, and start a new container with the image.

Using --restart=always policy will handle restart of existing containers in case of reboot.

The problem is that if there are multiple containers with --restart=always when you run image of a newer version as discussed in docker - how do you disable auto-restart on a container?.

Trying to automatically remove the container when it exist by put option docker run --rm will also problem with the --restart=always policy since they are conflicting each others.

$ docker run --rm --restart always <image>
Conflicting options: --restart and --rm

So in this case it is better to choose another option: --restart unless-stopped policy.

$ docker run --rm --restart unless-stopped <image>

This policy will not conflicting the docker run --rm but as explained in docker documentation:

It similar to --restart=always, except that when the container is stopped (manually or otherwise), it is not restarted even after Docker daemon restarts.

So when using this --restart unless-stopped policy, to ensure the restarting is working in case it stop by accident when you close the terminal, do once in another terminal as below:

$ docker ps
$ docker restart <container>

Wait until the killing process end in the previous shell, then close it and just leave (don't do exit).
And check again in the remained terminal if the container is still running:

$ docker ps

If it is still running the you can safely reboot and check again that the application is restarting and see your docker is clean without unused of multiple containers.