确保Docker容器在主机启动时自动启动

问题描述 投票:0回答:2

有没有办法在主机启动时自动启动Docker容器?之前,我在docker run中使用'-restart always'参数,但只有在Docker Engine没有被杀死时它才有效。

docker
2个回答
0
投票

作为你的评论,我认为你误解了--restart always

运行docker run --restart always container后,即使您明确停止container,每次重新启动主机时都会重新启动container

例如。

$ 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

然而,当然,它是基于docker-host自动启动的前提。 docker-host在这里意味着docker daemon过程本身。通常docker-host默认会自动启动,但如果不是,则需要自己设置。

我不确定你使用的操作系统,但是当谈到Ubuntu16时,你可以使用systemctl命令。

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

0
投票

如果您使用docker swarm,则可以使用global service标记生成--mode global,以确保在docker swarm中的每个节点上运行。

docker service create --mode global ...

如果你不使用docker swarm,我认为最好的解决方案是使用你的系统的init系统,如systemd,如@ I.R.R所说。您可以为systemd创建自己的service文件,并在服务启动时指定条件,如下所示。

[Unit]
Description=Your App
After=docker

请参阅数字海洋的article

© www.soinside.com 2019 - 2024. All rights reserved.