Docker provides restart policies to control whether your containers start automatically when they exit, or when Docker restarts. Restart policies ensure that linked containers are started in the correct order. Docker recommends that you use restart policies, and avoid using process managers to start containers.
Build the container image: docker build . -t sysd. Start a container: docker run --tmpfs /tmp --tmpfs /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 9090:80 --name sysd --rm sysd. To get a shell inside the container execute the following command in a second shell: docker exec -it sysd bash.
Yes, docker has restart policies such as docker run --restart=always
that will handle this. This is also available in the compose.yml config file as restart: always
.
If you want the container to be started even if no user has performed a login (like the VirtualBox VM that I only start and don't want to login each time). Here are the steps I performed to for Ubuntu 16.04 LTS. As an example, I installed a oracle db container:
$ docker pull alexeiled/docker-oracle-xe-11g
$ docker run -d --name=MYPROJECT_oracle_db --shm-size=2g -p 1521:1521 -p 8080:8080 alexeiled/docker-oracle-xe-11g
$ vim /etc/systemd/system/docker-MYPROJECT-oracle_db.service
and add the following content:
[Unit]
Description=Redis container
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStart=/usr/bin/docker start -a MYPROJECT_oracle_db
ExecStop=/usr/bin/docker stop -t 2 MYPROJECT_oracle_db
[Install]
WantedBy=default.target
and enable the service at startup
sudo systemctl enable docker-MYPROJECT-oracle_db.service
For more informations https://docs.docker.com/engine/admin/host_integration/
The default restart policy is no
.
For the created containers use docker update
to update restart policy.
docker update --restart=always 0576df221c0b
0576df221c0b
is the container id.
You can use docker update --restart=on-failure <container ID or name>
.
On top of what the name suggests, on-failure
will not only restart the container on failure, but also at system boot.
Per the documentation, there are multiple restart options:
Flag Description
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. (See the second bullet listed in restart policy details)
unless-stopped Similar to always, except that when the container is stopped (manually or otherwise), it is not restarted even after Docker daemon restarts.
1) First of all, you must enable docker service on boot
$ sudo systemctl enable docker
2) Then if you have docker-compose .yml file add restart: always
or if you have docker container add restart=always like this:
docker run --restart=always
and run docker container
Make sure
If you manually stop a container, its restart policy is ignored until the Docker daemon restarts or the container is manually restarted.
see this restart policy on Docker official page
3) If you want start docker-compose, all of the services run when you reboot your system So you run below command only once
$ docker-compose up -d
More "gentle" mode from the documentation:
docker run -dit --restart unless-stopped <image_name>
To start a container and set it to restart automatically on system reboot use
docker run -d --restart unless-stopped ecstatic_ritchie
Where ecstatic_ritchie
is an example name specifying the container in interest. Use docker ps -a
to list all container names.
To make particular running containers start automatically on system reboot
docker update --restart unless-stopped ecstatic_ritchie
To make all running containers start automatically on system reboot
docker update --restart unless-stopped $(docker ps -q)
See more on Docker homepage
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With