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

确保Docker容器在主机启动时自动启动,docker,Docker,是否有一种方法可以在主机启动时自动启动Docker容器?以前,我在docker run中使用“-restart always”参数,但它仅在docker引擎未关闭的情况下工作。如果使用docker swarm,可以使用--mode global标志确保在docker swarm中的每个节点上运行 docker service create --mode global ... 如果您不使用docker swarm,我认为最好的解决方案是使用您系统的init系统,如@I.R.R所说的systemd

是否有一种方法可以在主机启动时自动启动Docker容器?以前,我在docker run中使用“-restart always”参数,但它仅在docker引擎未关闭的情况下工作。

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

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

[Unit]
Description=Your App
After=docker

请参阅digital ocean的这篇文章。

作为您的评论,我认为您误解了
——始终重新启动

一旦运行了
docker run--restart always 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主机
自动启动的前提<代码>docker主机
在这里表示
docker守护进程
进程本身。通常默认情况下,
docker主机
将自动启动,但如果不是,则需要自行设置

我不确定您使用的是哪个操作系统,但当涉及到
Ubuntu16
时,您可以使用
systemctl
命令来实现

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

如果您使用的是RHEL变体,这应该可以工作:我将其作为参考,但当我尝试启动服务时,它总是失败,并且没有得到明确的错误。为什么不想使用
--始终重新启动
?使用该标志,在您
删除容器之前,每当主机启动时,容器都会自动启动。@SangminKim实际上,如果主机死亡,容器不会重新启动。我再看一看,Docker swarm在这件事上太过分了。事实上,我试过做服务路线,但由于某种原因,它总是失败。我要做的是在文件中有一个docker start命令。我会再看一看。我使用了restart always参数,但由于某些原因,它没有启动,尽管在我没有遇到任何问题之前。如果要在windows启动中自动启动docker守护程序和docker desktop,请执行以下步骤