jackeblagare
jackeblagare

Reputation: 417

Ensuring Docker container will start automatically when host starts

Is there a way to start a Docker container automatically when the host starts? Before, I use the ‘—restart always’ parameter with docker run but it only works if Docker Engine is not killed.

Upvotes: 0

Views: 6876

Answers (2)

SangminKim
SangminKim

Reputation: 9136

As your comment, I think you have misunderstood about --restart always.

Once docker run --restart always container is run, the container is restarted every time the host is restarted even though you stop the container explicitly .

For example.

$ docker run --restart always --detach --name auto-start-redis redis
d04dfbd73eb9d2ba5beac41363aa5c45c0e034e08173daa6146c3c704e0cd1da
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
d04dfbd73eb9        redis               "docker-entrypoint..."   4 seconds ago       Up 4 seconds        6379/tcp            auto-start-redis
$ reboot       

# After reboot-------------------------------

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
d04dfbd73eb9        redis               "docker-entrypoint..."   About a minute ago   Up 21 seconds       6379/tcp            auto-start-redis

$ docker stop auto-start-redis
auto-start-redis
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
d04dfbd73eb9        redis               "docker-entrypoint..."   2 minutes ago       Exited (0) 30 seconds ago                       auto-start-redis
$ reboot 

# After reboot-------------------------------

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
d04dfbd73eb9        redis               "docker-entrypoint..."   3 minutes ago       Up 12 seconds       6379/tcp            auto-start-redis

However, of course, it is based upon a premise that docker-host is auto-started. docker-host in here means docker daemon process itself. Usually docker-host will auto-start by default but if it is not, you need to set it yourself.

I am not sure which OS you are using but when it comes to Ubuntu16, you can make it with systemctl command.

$ sudo systemctl enable docker  
# To tell systemd to start services automatically at boot, you must enable.

Upvotes: 1

SunghoMoon
SunghoMoon

Reputation: 1461

If you use docker swarm, you can make global service with --mode global flag that ensures run on every node in docker swarm.

docker service create --mode global ...

If you don't use docker swarm, the best solution I think is to use init system of your system like systemd as @I.R.R said. You can make your own service file for systemd and specify the condition when the service starts like below.

[Unit]
Description=Your App
After=docker

Refer to this article by digital ocean.

Upvotes: 0

Related Questions