有没有办法在主机启动时自动启动Docker容器?之前,我在docker run中使用'-restart always'参数,但只有在Docker Engine没有被杀死时它才有效。
作为你的评论,我认为你误解了--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.
如果您使用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。