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

时间:2017-12-23 00:15:20

标签: docker

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

2 个答案:

答案 0 :(得分:0)

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

docker service create --mode global ...

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

[Unit]
Description=Your App
After=docker

请参阅数字海洋article

答案 1 :(得分: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.