Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to run docker-compose up -d at system start up?

To let the containers autostart at startup point, I tried to add the command:

cd directory_has_docker-compose.yml && docker-compose up -d in /etc/rc.local.

but then after I reboot the machine, the containers not work.

How run docker-compose up -d at system start up?

like image 341
user39544 Avatar asked Apr 28 '17 03:04

user39544


3 Answers

You should be able to add:

restart: always 

to every service you want to restart in the docker-compose.yml file.

See: https://github.com/compose-spec/compose-spec/blob/master/spec.md#restart

like image 25
MaxiReglisse Avatar answered Nov 20 '22 13:11

MaxiReglisse


When we use crontab or the deprecated /etc/rc.local file, we need a delay (e.g. sleep 10, depending on the machine) to make sure that system services are available. Usually, systemd (or upstart) is used to manage which services start when the system boots. You can try use the similar configuration for this:

# /etc/systemd/system/docker-compose-app.service

[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/srv/docker
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target

Or, if you want run without the -d flag:

# /etc/systemd/system/docker-compose-app.service

[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service
StartLimitIntervalSec=60

[Service]
WorkingDirectory=/srv/docker
ExecStart=/usr/local/bin/docker-compose up
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
Restart=on-failure
StartLimitBurst=3

[Install]
WantedBy=multi-user.target

Change the WorkingDirectory parameter with your dockerized project path. And enable the service to start automatically:

systemctl enable docker-compose-app
like image 99
Oleg Belostotsky Avatar answered Nov 20 '22 12:11

Oleg Belostotsky


If your docker.service enabled on system startup

$ sudo systemctl enable docker

and your services in your docker-compose.yml has

restart: always

all of the services run when you reboot your system if you run below command only once

docker-compose up -d
like image 210
vatandoost Avatar answered Nov 20 '22 12:11

vatandoost