docker容器开机自启(docker容器开机启动顺序)
本篇文章给大家谈谈docker容器开机自启,以及docker容器开机启动顺序对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、unraiddocker自动重启
- 2、重启docker命令(docker自动重启)
- 3、docker容器自动启动及修改配置文件
- 4、如何设置docker容器和容器中的应用开机自启动
- 5、docker 容器自动启动run
unraiddocker自动重启
为了保证容器运行时健壮性(自愈),Docker 提供了容器重启策略,即使用参数 --restart,它可以让容器在退出时自动尝试重启。
场景
Docker 容器的重启策略一般用于生产环境,开发环境和实验环境可以忽略。例如使用 Docker 运行 Nginx。Nginx 作为目前常用的 web 服务器,我们肯定更希望看到它在因停电、主机重启等意外事件中尝试自动恢复。
原理
Docker 容器的自动重启是由 Docker 守护进程完成的。在较老版本 Docker 中,如果 docker 守护进程重启,容器会全部挂掉。新版本 Docker 中,允许设置,当 docker 守护进程重启,容器不受影响。该场景比较多见,例如修改了 docker 的配置而需要重新加载 docker 守护进程,如果 docker 容器重启,业务会短暂中断,尤其是在生产环境这是不可接受的。所以这个设置很有必要。
具体设置方法有两种:
第一种,编辑 /etc/docker/daemon.json,添加 "live-restore": true :
{ "live-restore": true, }
第二种,命令启用
dockerd --live-restore systemd
Docker 容器的重启策略具体如下:
no
默认策略,在容器退出时不重启容器。启动容器时不添加参数 --restart 即可。
on-failure
在容器非正常退出时(退出状态非0),才会重启容器。
on-failure:n
在容器非正常退出时重启容器,并且指定重启次数。n 为正整数。如果不指定次数,则会一直重启。
always
只要容器退出李清就重启容器。
unless-stopped
在容器退出时总是重启容器,但是 Docker 守护进程启动之前就已经停止运行的容器不算在内。
2. Docker 容器的退出状态码
Docker 容器也有退出状态码,这一点类似 Linux 命令。Docker 容器的重启策略就是基于状态码。具体如下:
表示容器正常退出。例如 stop 容器。
非 0
表示容器退出异常(退出状态码采用 chroot 标准)。例如执行 docker run 失败后的容器退出。
125
Docker 守护进程本身有错误。
126
容器启动后,要执行的默认命令无法调用。
127
容器启动后,要执行的默认命令不存在。
其他命令状态码
容器启动后在容器内部执行命令,该命令退出时的返回状态码,就作为容器的退出状态码。
3. 获取 Docker 容器退出状态码的方法
3.1 使用命令 docker ps -a
该命令结果的第 5 列中 Exited 后面括号中的数字就是容器的退出状态码。如下所示,Exited (1) 33 minutes ago,1 就是这个容器的退出状态码。枝谈但是 1 并不是容器本身的退出状态码,而是容器中运行的命令执行失败后退出的状态码。在 Linux 系统定义的命令退出状态码中,1 表示未知,即系统不知道具体错误的原因。这时候就需要看具体的日志来判断。
[root@k8s-master /]# docker ps -a | grep nginx 3e64cad716c0 192.168.100.20:5000/mynginx:latest "nginx" 36 minutes ago Exited (1) 33 minutes ago nginx-demo
3.2 使用 inspect 命令
inspect 命令是用来获取容器的命令,配合其他参数就能获取容器的退出状态码。如下所示,还是上面案例中的容器,获得其退出状态码为 1
[root@k8s-master /]# docker inspect 3e64cad716c0 --format='{{.State.ExitCode}}' 1
4. docker run 的 --restart 参数说明
--restart 选项通常只用于 detached 模式的容器。
detached 即后台运行模式(类比 Linux 命令的前台运行和后台运行)。Docker容器的两种运行模式:Foreground,Detached。docker run 时添加了 -d 或者 -d=true 参数,就是后台模式运行。
--restart 选项不能与 --rm 选项同时猛扰碰使用。
因为 --rm 选项只适用于 foreground 模式的容器。
在 docker ps 查看容器时,对于使用了 --restart 选项的容器,其可能的状态只有 Up 或 Restarting 两种状态。
5. --restart 参数中的其他设定
猜测一下,--restart 的重启时间间隔是怎样的?这个参数会失效吗?又会在什么情况下失效?
来看实验:
启动一个 Nginx 容器,当它找不到配置文件时,Nginx 报错并且进程退出,容器也随之推出。此时该容器会尝试重启。
如下所示:
[root@k8s-master /]# docker run -d --name nginx-demo -p 8010:80 -v /data/nginx/html/:/usr/share/nginx/html/ -v /data/nginx/logs/:/var/log/nginx/ -v /data/nginx/conf/:/etc/nginx/ --restart=always 192.168.100.20:5000/mynginx:latest 3e64cad716c0d60e9249dc72c11cc5cc7ece42d3f69fcf276ff28fd84782ed89 [root@k8s-master /]# [root@k8s-master /]# ls /data/nginx/* /data/nginx/conf: /data/nginx/html: /data/nginx/logs: error.log [root@k8s-master /]# [root@k8s-master /]# tail -f /data/nginx/logs/error.log 2022/03/30 04:00:54 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:00:55 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:00:55 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:00:56 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:00:57 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:00:58 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:01:02 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:01:08 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:01:21 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:01:47 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:02:39 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) [root@k8s-master /]# [root@k8s-master /]# docker stop nginx-demo nginx-demo [root@k8s-master /]# [root@k8s-master /]# tail -f /data/nginx/logs/error.log 2022/03/30 04:00:56 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:00:57 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:00:58 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:01:02 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:01:08 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:01:21 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:01:47 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:02:39 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:03:39 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory) 2022/03/30 04:04:39 [emerg] 1#0: open() "/etc/nginx/nginx.conf" failed (2: No such file or directory)
通过上面的实验,发现了几个很有意思的现象:
04:00:54,容器首次重启失败。 04:00:55,容器开始第一次尝试重启,直到第 5 次重启,每次重启时间间隔为 1 秒。 04:01:02,从第 6 次重启开始,时间间隔变为 3 秒。 04:01:08,从第 7 次重启开始,时间间隔变为 6 秒。 04:01:21,从第 8 次重启开始,时间间隔变为 13 秒。 04:01:47,从第 9 次重启开始,时间间隔变为 26 秒。 04:02:39,从第 10 次重启开始,时间间隔变为 52 秒。从这之后,时间间隔稳定变为 1 分钟。
从实验中我们推断出关于 --restart 重启策略中的一些设定:
关于时间策略的设定:
- 前 5 次时间间隔为 1 秒
- 第 6 次开始时间间隔为之前的 2 倍。
- 直到时间间隔超过 1 分钟时,后续的每一次重启的时间间隔都固定为 1 分钟。
关于 --restart 策略失效的设定:
- 当执行容器 stop 时, --restart 失效,容器不再尝试重启。实验中,重启日志一直停留在“2022/03/30 04:04:39”。
6. 容器启动时忘记使用 --restart=always 如何补救
6.1 使用 update 命令
[root@k8s-master /]# docker container update --restart=always 3e64cad716c0 3e64cad716c0
6.2 修改容器的配置文件
vim /var/lib/docker/containers/容器ID/hostconfig.json,找到关键字 RestartPolicy,将 no 改为 always
修改前:
"RestartPolicy:{"Name":"no","MaximumRetryCount":0}
修改后:
"RestartPolicy:{"Name":"always","MaximumRetryCount":0}
重启容器即可。如果无法修改容器的配置,可先将容器停止,修改配置文件后再启动。
7. 获取容器重启信息
查看容器重启次数
[root@k8s-master /]# docker inspect -f "{{ .RestartCount }}" 3e64cad716c0 13
查看容器最后一次的启动时间
[root@k8s-master /]# docker inspect -f "{{ .State.StartedAt }}" 3e64cad716c0 2022-03-30T04:04:39
[img]重启docker命令(docker自动重启)
1、怎样重启docker。
2、重启docker容器命令。
3、重启Docker。
4、docker 重启命令陆埋搭。
1."重启docker的方法,为您提早拿供重启docker的方法视频及对应图文信息,docker的重启方法有两种:第一使用systemctlrestartdocker重启docker服务,第二使用dockerrestart容器id重启docker容器液掘。
docker容器自动启动及修改配置文件
创建容器时没有添加参数 --restart=always ,导致的后果是:当 Docker 重启时,容器未能自动启动。
现在要添加该参数怎么办呢,方法有指拦渗二:
1、Docker 命令修改
docker container update --restart=always 容器名字
2、直接改配置文衡知件(经测试后无效,修改配置文件后,启动容器后,该参数有自动变成了no,修改不生效)
修改docker容器的挂载路径
修改config的Source的配置路径
启动docker服务
启动所有docker容器
修改docker默认的存储位置
查看默认的docker存储路径
停止所有docker容唯脊器
停止docker服务
打包docker目录
修改docker默认的存储位置
查看修改后docker存储路径
如何设置docker容器和容器中的应用开机自启动
步骤1:为我们的容器创建第一个镜像
# 以 centos 镜像作为基础镜像,我们启动自己的容器并在其中执行/bin/bash命令
# 注:-t -i 参数用于创建一个虚拟的命隐败令行。
sudo docker run -t -i centos /bin/bash
现在我们已经成功的运行了自己的第一个容器,并且进入到容器的命令行界面中。在容器中,我们执行下面的命令:
yum -y update # 更新软件包
yum install which # 安装which命令
yum install git # 安装Git
安装完成后,按 Ctrl + d 来退出容器的命令行。
# 执行sudo docker ps -a,可以看到被我们终止的容器
CONTAINER ID IMAGE COMMAND CREATED……
da9031d3568f centos:6.4 /bin/bash 5 minutes ago…..
把我们所做的改变提交到一个新的容器:
# 这里我们创建一个自己的基础容器,容器中安装好了文章中所需的常用工具。读者的容器 id 可能与文章中的有所不同,以上一步 docker ps -a 的结果为准。
sudo docker commit da90 custom/base
容器成功提交后,执行 sudo docker images ,我们会看到刚才提交的容器(如下面的结果所示)。我们就以这个容器为基础容器,再来创建一个差携悉新的容器。
REPOSITORY TAG IMAGE ID CREATED
custom/base latest 05b6cecd370b 2 minutes ago
centos 6.4 539c0211cd76 10 months ago
centos latest 539c0211cd76 10 months ago…
步骤2:创建新的容器,并安装 apache
# 以 custom/base 容器为基础,运行一个新的容器。
sudo docker run -t -i custom/base /bin/bash
# 安装 httpd
yum install httpd
步骤3:再次提交新的容器
按 Ctrl + d 来退出容器的命令行,然后执行命令:
# 这个命令会把步骤2中我们安装 httpd 带来的改变提交到新的名为 custom/httpd 的容器镜像中。你的容器 id 可能会和文章中有所不同,以 sudo docker ps -a 命令的结果为准。
sudo docker commit aa6e2fc0b94c custom/httpd
你应该已经发现了,我们创建了一个带有 http 服务器并可以复用的容器镜像。你可以根据这种思想,为自己所需虚乎的每个组件都创建一个容器,然后把这些容器复用于开发环境或者生产环境。
步骤7:运行 http 服务器
# -v will Mount a volume from VM to the container which was also shared from host to Vagrant VM.
# -v 参数把主机共享给虚拟机的一个卷挂载到容器中
# -p forward VM port 80 to container port 80; VM port 80 is mapped to host port 8080 in Vagrantfile
# -p 参数把虚拟机的80端口映射到容器的80端口;虚拟机的80端口在 Vagrantfile 中被绑定到主机的8080端口,也就是:主机8080-虚拟机80-容器80
sudo docker run -t -i -p 80:80 -v /vagrant/htdocs:/var/www/html custom/httpd /bin/bash
# 启动 Apache
apachectl -k start
docker 容器自动启动run
部署项目服务器时,为了应对停电等情况影响正常web项目的访问,会把Docker容器设置为开机自动启动。
如果创建时未指定 --restart=always ,可通过update 命令设置
Docker容器的重启策略是面向生产环境的一个启动策略,在开发过程中可以忽略该策略。
Docker容器的重启都是由Docker守护进程完成的,因此与守护进程息息相关。
Docker容器的重启策略如下:
no,默认策略,在容器退出时不重启容器
on-failure,在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3,在容器非正常退出时重启容器,最多重启3次
always,在容器退出时总是重启容器
unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
docker run的退出状态码如下:
0,表示正常退出
非0,表示异常退出(退出状态码采用chroot标准)
125,Docker守护进程本身的错误
126,容器启动后,要执行唯清贺的默认命令无法调用
127,容指派器启动后,要执行的默认命令不存在
其他命令状态码,容器启动后正常执行命令,退出命令时该命令的返回状态码作为容器的退出状态码
通过--restart选项,可以设置容器的重启策略,以决定在容器退出时Docker守护进程是否重启刚刚退出的容器。
--restart选项通常只用于detached模式的容器。
--restart选项不能与--rm选项同时使用。显然,--restart选项适用于detached模式的容器,而--rm选项适用于foreground模式的容器。
在docker ps查看容器时,对于使用了--restart选项的容器,其可能的状态只有Up或Restarting两种状态。
示例:
补充:
查看容器重启次数
查看容器最后正灶一次的启动时间
关于docker容器开机自启和docker容器开机启动顺序的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。