Docker Automatic Start "Untitled" by Brett Sayles is licensed under Pexels.

Automatically Start Docker Container

Our site remains ad-free thanks to our affiliates. This post's featured affiliate is Namecheap. Namecheap offers domains at low prices while providing outstanding customer service.

The post is not sponsored by the above affiliate and the content here is not representative of their company.

Docker’s restart policy is the best way to have containers automatically start when you boot your server or computer. That should be the end of this post, but I’ll provide more details, examples, and reasons why you want to avoid other methods.

Docker’s restart policy is a flag you set when you first create a container from an image. The restart policy dictates whether the container should restart when it exits. The behavior is determined by which policy you choose. The container can automatically start again on erroneous exits or with all exit codes. The flag also affects the behavior of what happens if you manually stop a container.

Set Restart Policy

You can set the Docker restart policy when creating a container or update an existing container with a new restart policy.

The restart policy flag is --restart and has four different options. For more details, read the official Docker Restart Policy page.

Option Details
no Do not automatically restart the container. (the default)
on-failure Restart the container if it exits due to an error, which manifests as a non-zero exit code.
always Always restart the container if it stops. If it is manually stopped, it is restarted only when Docker daemon restarts or the container itself is manually restarted.
unless-stopped Similar to always, except that when the container is stopped (manually or otherwise), it is not restarted even after Docker daemon restarts.

The following command will create a container that will always restart. The majority of my containers use “always” or “unless-stopped.”

# docker run -d --restart always <image>

To update an existing container’s restart policy, use docker update with the policy you want. The update command can modify multiple containers at the same time.

# docker update --restart unless-stopped <container> [<container> ...]

Enable Docker Service

Once you have your containers running with a restart policy, you need to enable the Docker service. If the Docker daemon doesn’t start automatically, none of your containers will start.

Depending on your system, the process to enable the Docker daemon will vary. Enable the service within systemd by using the systemctl command.

# systemctl enable docker

For other init systems, you’ll have to research how to enable services. It will likely be a single command you have to run or create a symbolic link.

You can verify that the service has been enabled by checking the enabled status using systemctl.

# systemctl is-enabled docker

You can get a more detailed status of the docker service by running the following systemctl command. The output will include a log to help solve any issues that may be arising.

# systemctl status docker

Avoid Systemd Services

Many posts online outline creating a systemd service file to start Docker containers. I recommend avoiding this unless you have a good reason to do so.

Docker’s built-in restart policy has better control of handling when the container should restart. The restart policy also reduces complexity in a few different ways. Firstly, it doesn’t require you to create a unique service file for each container. Secondly, all of your Docker services will be within the docker daemon and not scattered throughout the system.

I’ve written service files before for containers when I needed pre and post-tasks before and after the container was created and destroyed. Ideally, your container shouldn’t need any outside tasks. In the real world, there are times when you need to get something working until you can come up with a proper solution.

Related Posts

How to Train SpamAssassin

Learn about the different methods used to train SpamAssassin, along with initial spam data sources to use with SpamAssassin. Update your bayes database easily with existing data.

SpamAssassin SA-Update Tool

Learn what SpamAssassin's sa-update tool does, how it works, and if you should keep it running and modifying the configuration files on your server.

Reducing Docker Image Size

Reduce your Docker image size by inspecting each layer, applying our tips, and by understanding how Docker images are built and stored.

Incremental MySQL Backup with Binary Log

Learn how to properly perform an incremental MySQL backup using binary logs without having a gap between backups and overall improve the speed of database backups.