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

有没有办法启动主机启动时自动启动Docker容器? 之前,我在docker运行中使用'-restart always'参数,但只有在Docker引擎没有被终止的情况下才能工作。

如果使用docker swarm,则可以使用--mode global标志进行全局服务,以确保在docker swarm中的每个节点上运行。

 docker service create --mode global ... 

如果你不使用docker swarm,我认为最好的解决scheme就是像systemd那样使用系统的init系统,就像@IRR所说的那样。 您可以为systemd创build自己的service文件,并指定服务启动时的状态,如下所示。

 [Unit] Description=Your App After=docker 

数字海洋参考这篇文章 。

正如你的评论,我想你--restart always误解了--restart always

一旦docker run --restart always container运行container则每当主机重新启动时,即使明确停止containercontainer也会重新启动。

例如。

 $ 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.