docker重启参数--restart=always的作用

    --restart=always参数能够使我们在重启docker时,自动启动相关容器。
Docker容器的重启策略如下:
no,默认策略,在容器退出时不重启容器
on-failure,在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3,在容器非正常退出时重启容器,最多重启3次
always,在容器退出时总是重启容器
unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
————————————————
版权声明:本文为CSDN博主「易生一世」的原创文章,遵循CC 4.0 BY 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/taiyangdao/article/details/73076019

    首先我们先看下正常启动容器不加参数的情况重启docker会出现什么情况

一、启动时候添加参数

1、不加–restart=always参数启动容器

[root@localhost /]# docker run -d tomcat
1a7a3b5112fd310dc70903df479203a81d7d64f7c19ea0aca8fff8ece10e04a4
[root@localhost /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
1a7a3b5112fd        tomcat              "catalina.sh run"   29 seconds ago      Up 28 seconds       8080/tcp            friendly_clarke
[root@localhost /]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
1a7a3b5112fd        tomcat              "catalina.sh run"   32 seconds ago      Up 31 seconds       8080/tcp            friendly_clarke

2、重启docker,查看状态,可以看到,重启docker之后,容器也停止了运行,这在生产环境上是非常危险的。

[root@localhost /]# systemctl restart docker 
[root@localhost /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@localhost /]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                       PORTS               NAMES
1a7a3b5112fd        tomcat              "catalina.sh run"   About a minute ago   Exited (143) 5 seconds ago                       friendly_clarke
[root@localhost /]# 

3、下面我们使用-restart=always参数启动容器

[root@localhost /]# docker run -d --restart always tomcat
c5557254c6d90b1ba8f9a93ff66e6a28f172e92a56cf945af533327f38152fbc
[root@localhost /]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c5557254c6d9        tomcat              "catalina.sh run"   4 seconds ago       Up 3 seconds        8080/tcp            fervent_goldstine
[root@localhost /]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                            PORTS               NAMES
c5557254c6d9        tomcat              "catalina.sh run"   8 seconds ago       Up 7 seconds                      8080/tcp            fervent_goldstine
1a7a3b5112fd        tomcat              "catalina.sh run"   2 minutes ago       Exited (143) About a minute ago                       friendly_clarke
[root@localhost /]# systemctl restart docker
[root@localhost /]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c5557254c6d9        tomcat              "catalina.sh run"   18 seconds ago      Up 3 seconds        8080/tcp            fervent_goldstine
[root@localhost /]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                            PORTS               NAMES
c5557254c6d9        tomcat              "catalina.sh run"   26 seconds ago      Up 10 seconds                     8080/tcp            fervent_goldstine
1a7a3b5112fd        tomcat              "catalina.sh run"   3 minutes ago       Exited (143) About a minute ago                       friendly_clarke
[root@localhost /]# 

二、命令修改

    在启动时如果没有添加这个参数怎么办呢,比如1a7a3b5112fd这个容器在启动的时候是没有添加–restart=always参数的,针对这种情况我们可以使用命令进行修改。docker container update --restart=always 容器名字

[root@localhost /]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                            PORTS               NAMES
c5557254c6d9        tomcat              "catalina.sh run"   26 seconds ago      Up 10 seconds                     8080/tcp            fervent_goldstine
1a7a3b5112fd        tomcat              "catalina.sh run"   3 minutes ago       Exited (143) About a minute ago                       friendly_clarke
[root@localhost /]# docker container update --restart=always 1a7a3b5112fd
1a7a3b5112fd
[root@localhost /]# systemctl restart docker 
[root@localhost /]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c5557254c6d9        tomcat              "catalina.sh run"   7 minutes ago       Up 3 seconds        8080/tcp            fervent_goldstine
1a7a3b5112fd        tomcat              "catalina.sh run"   9 minutes ago       Up 3 seconds        8080/tcp            friendly_clarke
[root@localhost /]# 

三、修改配置文件

除了上面两种方式之后还可以通过修改容器的配置文件来修尽管这个参数,首先停止容器,不然无法修改配置文件
配置默认文件路径为:/var/lib/docker/containers/容器ID
在该目录下找到一个文件 hostconfig.json ,找到该文件中关键字 RestartPolicy
修改前配置:“RestartPolicy”:{“Name”:“no”,“MaximumRetryCount”:0}
修改后配置:“RestartPolicy”:{“Name”:“always”,“MaximumRetryCount”:0}
最后启动容器。

[root@localhost /]# docker container update --restart=no 1a7a3b5112fd
1a7a3b5112fd
[root@localhost /]# systemctl restart docker
[root@localhost /]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
c5557254c6d9        tomcat              "catalina.sh run"   11 minutes ago      Up 2 seconds                 8080/tcp            fervent_goldstine
1a7a3b5112fd        tomcat              "catalina.sh run"   14 minutes ago      Exited (143) 3 seconds ago                       friendly_clarke
[root@localhost ~]# cd /docker/containers/1a7a3b5112fd310dc70903df479203a81d7d64f7c19ea0aca8fff8ece10e04a4/
[root@localhost 1a7a3b5112fd310dc70903df479203a81d7d64f7c19ea0aca8fff8ece10e04a4]# ls
1a7a3b5112fd310dc70903df479203a81d7d64f7c19ea0aca8fff8ece10e04a4-json.log  config.v2.json   hostname  mounts       resolv.conf.hash
checkpoints                                                                hostconfig.json  hosts     resolv.conf
[root@localhost 1a7a3b5112fd310dc70903df479203a81d7d64f7c19ea0aca8fff8ece10e04a4]# more hostconfig.json 
{"Binds":null,"ContainerIDFile":"","LogConfig":{"Type":"json-file","Config":{}},"NetworkMode":"default","PortBindings":{},"RestartPolicy":{"Name":"no","MaximumR
etryCount":0},"AutoRemove":false,"VolumeDriver":"","VolumesFrom":null,"CapAdd":null,"CapDrop":null,"Capabilities":null,"Dns":[],"DnsOptions":[],"DnsSearch":[],"Extr
aHosts":null,"GroupAdd":null,"IpcMode":"private","Cgroup":"","Links":null,"OomScoreAdj":0,"PidMode":"","Privileged":false,"PublishAllPorts":false,"ReadonlyRootfs":f
alse,"SecurityOpt":null,"UTSMode":"","UsernsMode":"","ShmSize":67108864,"Runtime":"runc","ConsoleSize":[0,0],"Isolation":"","CpuShares":0,"Memory":0,"NanoCpus":0,"C
groupParent":"","BlkioWeight":0,"BlkioWeightDevice":[],"BlkioDeviceReadBps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteIOps":null,"
CpuPeriod":0,"CpuQuota":0,"CpuRealtimePeriod":0,"CpuRealtimeRuntime":0,"CpusetCpus":"","CpusetMems":"","Devices":[],"DeviceCgroupRules":null,"DeviceRequests":null,"
KernelMemory":0,"KernelMemoryTCP":0,"MemoryReservation":0,"MemorySwap":0,"MemorySwappiness":null,"OomKillDisable":false,"PidsLimit":null,"Ulimits":null,"CpuCount":0
,"CpuPercent":0,"IOMaximumIOps":0,"IOMaximumBandwidth":0,"MaskedPaths":["/proc/asound","/proc/acpi","/proc/kcore","/proc/keys","/proc/latency_stats","/proc/timer_li
st","/proc/timer_stats","/proc/sched_debug","/proc/scsi","/sys/firmware"],"ReadonlyPaths":["/proc/bus","/proc/fs","/proc/irq","/proc/sys","/proc/sysrq-trigger"]}
[root@localhost 1a7a3b5112fd310dc70903df479203a81d7d64f7c19ea0aca8fff8ece10e04a4]# sed -i 's/"RestartPolicy":{"Name":"no"/"RestartPolicy":{"Name":"always"/g' hostconfig.json
[root@localhost 1a7a3b5112fd310dc70903df479203a81d7d64f7c19ea0aca8fff8ece10e04a4]# more hostconfig.json
{"Binds":null,"ContainerIDFile":"","LogConfig":{"Type":"json-file","Config":{}},"NetworkMode":"default","PortBindings":{},"RestartPolicy":{"Name":"always","MaximumR
etryCount":0},"AutoRemove":false,"VolumeDriver":"","VolumesFrom":null,"CapAdd":null,"CapDrop":null,"Capabilities":null,"Dns":[],"DnsOptions":[],"DnsSearch":[],"Extr
aHosts":null,"GroupAdd":null,"IpcMode":"private","Cgroup":"","Links":null,"OomScoreAdj":0,"PidMode":"","Privileged":false,"PublishAllPorts":false,"ReadonlyRootfs":f
alse,"SecurityOpt":null,"UTSMode":"","UsernsMode":"","ShmSize":67108864,"Runtime":"runc","ConsoleSize":[0,0],"Isolation":"","CpuShares":0,"Memory":0,"NanoCpus":0,"C
groupParent":"","BlkioWeight":0,"BlkioWeightDevice":[],"BlkioDeviceReadBps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteIOps":null,"
CpuPeriod":0,"CpuQuota":0,"CpuRealtimePeriod":0,"CpuRealtimeRuntime":0,"CpusetCpus":"","CpusetMems":"","Devices":[],"DeviceCgroupRules":null,"DeviceRequests":null,"
KernelMemory":0,"KernelMemoryTCP":0,"MemoryReservation":0,"MemorySwap":0,"MemorySwappiness":null,"OomKillDisable":false,"PidsLimit":null,"Ulimits":null,"CpuCount":0
,"CpuPercent":0,"IOMaximumIOps":0,"IOMaximumBandwidth":0,"MaskedPaths":["/proc/asound","/proc/acpi","/proc/kcore","/proc/keys","/proc/latency_stats","/proc/timer_li
st","/proc/timer_stats","/proc/sched_debug","/proc/scsi","/sys/firmware"],"ReadonlyPaths":["/proc/bus","/proc/fs","/proc/irq","/proc/sys","/proc/sysrq-trigger"]}
[root@localhost /]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
c5557254c6d9        tomcat              "catalina.sh run"   14 minutes ago      Up 2 seconds        8080/tcp            fervent_goldstine
1a7a3b5112fd        tomcat              "catalina.sh run"   17 minutes ago      Up 2 seconds        8080/tcp            friendly_clarke
  • 23
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: docker run --restart=always 的意思是在容器退出时自动重启容器,并且在Docker守护进程启动时启动容器。这个命令可以保证容器的持续运行,即使容器出现故障或崩溃也会自动重启。 ### 回答2: docker run --restart=always 是docker命令中的一个参数作用是设置在docker服务异常退出时自动重启容器。 在容器运行过程中,可能会出现一些问题导致容器异常退出,如应用程序或服务崩溃、内存溢出、网络故障等。如果不进行设置自动重启,这就需要手动对容器进行重启,否则服务将会中断,造成不必要的麻烦和时间浪费。 使用 --restart=always 参数可以在容器运行过程中自动重启,保证服务的不间断提供,提高了容器的可靠性和稳定性。无论是容器异常退出还是物理机或虚拟机故障,都能自动重启,保证应用可以及时恢复。同时,该参数还能让开发者更加便捷地进行容器的管理,提高了开发效率。 例如,使用命令 docker run --restart=always -d nginx ,启动nginx容器,如果在运行过程中nginx服务异常退出,docker服务会自动重启该容器,保证服务可以及时恢复,提高了应用程序的可靠性和稳定性。 总之,使用 docker run --restart=always 参数可以保证服务的可靠性,提高容器的稳定性和可靠性,为应用程序的开发和部署提供了保障。 ### 回答3: docker run --restart=always是一条Docker命令,用于在容器启动时自动重启容器。当容器运行出现故障或其他问题导致容器停止,自动重启容器可以确保应用程序始终处于运行状态,保持高可用性。 该命令中的--restart参数有多个选项,其中最常见的是always。使用该选项时,Docker会在容器异常退出时自动重启容器,直到手动停止容器。 为了实现容器的自动重启Docker会在后台运行一个重启策略。当Docker检测到容器退出时,该策略会尝试根据预定义的规则自动重启容器。 在使用Docker部署应用程序时,特别是在生产环境中,使用--restart=always是一个很好的实践,可以确保应用程序在任何情况下都可以正常运行。 总之,Docker的--restart选项是一个很实用的功能,能够确保应用程序的高可用性和稳定性。在使用该选项时,需要根据实际情况选择适当的重启策略,以确保应用程序的恢复能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值