How to restart an existing Docker container in restart=“always” mode?

When you initially run a Docker container from an image you can specify the option:


This ensures that the container is always restarted by the Docker daemon if for some reason it stops. So you could run a container like so:

  • Ember and Sails Deployment
  • What causes flume with GCS sink to throw a OutOfMemoryException
  • Redirect users to different domains of the same web application according to their ip address location
  • “Cannot connect to the Docker daemon.” error while building docker image in gitlab-ci docker executor
  • docker - change default login user
  • start multiple docker containers with a single command line shell script (without docker-compose)
  • docker run --restart="always" <IMAGE>

    Also you can restart an existing Docker container by specifying its container ID, i.e.:

    docker start <CONTAINER ID>

    However I can’t determine if it’s possible to change an existing container, that originally was not run with the --restart="always option, to convert it to always restart in future.

    Currently the only way I can think to do this is to save the container as a new image and then run that image as a new container with the --restart="always" option. Would this in fact be the correct way to do this?

    EDIT: What I perhaps didn’t make clear enough originally is that I am thinking about the situation where there have been changes in the container since it was originally run, which need to be persisted. So just running a new container from the original image would not be sufficient.

  • Kubernetes Kube-Proxy Server: Can it run without iptables' nat module?
  • Rename a project by keeping containers
  • Android / busybox / termux test envionment
  • docker login to gitlab registry with github account
  • Scaling microservices using Docker
  • Concurrency error while executing DocumentDB stored procedure on multiple Docker containers
  • 4 Solutions collect form web for “How to restart an existing Docker container in restart=“always” mode?”

    We now have docker update, which allows changing the restart policy of a running container.

    docker update --restart=always <CONTAINER ID>

    There are three other options:

    • no (default)
    • on-failure
    • unless-stopped

    Please refer to the link for details.

    Ok, so to answer my own question, it seems that it’s not possible just to restart the same container with --restart=always, because that’s something you have to do when you run a container for the first time and not a parameter that you can use when you start an existing container.

    There are three possible work-arounds to this:

    1. As @user2915097 stated, you can abandon the original container (stopping it and then deleting it with docker rm <CONTAINER ID>to tidy up). Then just run a new container from the original image specifying the -restart=always option this time.
    2. If no volumes were used, so the changes are internal to the container, you need to commit the container to a new image and then run a new container from that image.

      docker commit <CONTAINER ID> <NEW IMAGE NAME>

      docker run -d --restart=always ... <NEW IMAGE NAME>

    3. If volumes were used and all changes are restricted to the volumes, then you can run a second container with the --volumes-from parameter without having to commit a new version of the image. i.e.

      • docker stop <CONTAINER 1 NAME>
      • docker run -d --restart=always --volumes-from <CONTAINER 1 NAME> ... <ORIGINAL IMAGE NAME>

      It would then be safe to delete Container 1, as the volumes will not be deleted whilst another container continues to use them.

    I guess there is a fourth possibility too; if you used a volume(s) and you know that there have been changes to the container that aren’t on the volume, then you’ll have to use a combination of (2) and (3).

    Update: This worked to enable restart. But setting it back to no and it gets reset back to always and the container starts again! 🙁 I’m going to leave this answer here in case someone figures out how this really works. I must be close!

    Folks, I’ve found the most hacky solution that gets around copying containers etc.

    vi /var/lib/docker/containers/$(docker inspect -f ‘{{ .Id }}’ $ContainerID)/hostconfig.json

    Search for “RestartPolicy”. Set it to “no”, “always” etc

    Maybe someone could wrap that up in a script!?

    Anyway, that piece of json along with the config.json would allow you to modify all sorts of things that you missed when creating your container.

    extract from

    So let say you want to change the restart policy of this container
    from always to on-failure. To do this, you need to stop the container,
    remove it and re-run it with the new restart policy.

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.