确保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
则每当主机重新启动时,即使明确停止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.