有没有办法在主机启动时自动启动Docker容器?之前,我在docker run中使用'-restart always'参数,但只有在没有杀死Docker Engine时它才有效。
答案 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.