60

As I hosted a WordPress site in docker containers and i want these containers to be started at boot time always, so need to done it manually.

graham
  • 9,753
  • 18
  • 37
  • 59
nayan tiwari
  • 711
  • 1
  • 5
  • 4

4 Answers4

47

It is a very common use case to add the restart policy on an existing container.

This could be done with the following command: docker update --restart {no,on-failure,unless-stopped,always} container_name

More details: Docker - Start containers automatically

Slim
  • 571
  • 4
  • 3
  • 2
    This solved my problem perfectly! I had a container with my database, and wanted it to start when my Mac started. By specifying that its image was always restarted (unless stopped), this did the trick! – Colin Aug 22 '18 at 15:20
  • They don't mention `update` anywhere on that page, great trick! I went w/ systemd files, because I thought the only way was to delete and re-`run` with restart flag~! – FreeSoftwareServers Feb 18 '20 at 04:10
  • A downside to using systemd is that if I use `docker stop` then `systemd` restarts it~! You have to use `systemd stop` to stop the container~! – FreeSoftwareServers Feb 18 '20 at 04:13
  • doesn't wok on MacOS `Error response from daemon: No such container: on-failure` – deathangel908 Mar 17 '20 at 07:22
  • @deathangel908 try with `--restart=on-failure` – Slim May 01 '20 at 15:38
39

Till now I don't think there is a way to do that normally. A tricky solution is to use restart policy

sudo docker run --restart=always -d your_image

This means whenever you shut down this will exit your container so as you start your host then this lead to restart the docker.

Kevin
  • 1,293
  • 1
  • 10
  • 16
Maythux
  • 82,867
  • 54
  • 239
  • 271
23

As ubuntu 15 now supports systemd, sample for this manager:

someservicename.service

[Unit]
Description=Some service
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a container_name
ExecStop=/usr/bin/docker stop -t 2 container_name

[Install]
WantedBy=multi-user.target

More available on docker site

P.S. Pretty cute config :)

Reishin
  • 936
  • 8
  • 11
  • A downside to using systemd is that if I use `docker stop` then `systemd` restarts it~! You have to use `systemd stop` to stop the container~! – FreeSoftwareServers Feb 18 '20 at 04:14
  • @FreeSoftwareServers well, if you put something to be managed by something, then you should not manage it manually and let it be managed by that tool. Alternatively, you can edit the service file to instruct systemd to start the service only at booting sequence, i showed here the generic approach - details can be tuned further by any your needs. – Reishin Feb 19 '20 at 20:48
  • That might make a good edit – FreeSoftwareServers Feb 20 '20 at 01:15
  • You might as well use supervisor if going this route. You want all control in Docker and not anywhere else, that's why you'd have used Docker in the first place. – chx101 Jan 04 '21 at 07:44
4

What I did is to use Upstart files.

You can find some examples and other solutions in the Docker website.

Create a file such like that in /etc/init :

Description "My container"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
   /usr/bin/docker start -a mycontainer
end script
pre-stop script
  /usr/bin/docker stop mycontainer
end script

Note, as from Docker 1.2, there are restart policies which may also help to automatically restart containers when the docker service is run (after boot for example).

Personnaly, I use puppet to provision my workstation and use this Docker module to automatically create the startup scripts which are more complete (start, stop, restart, clean options...)

aklmie
  • 1,036
  • 2
  • 8
  • 17