优雅重启Docker

问题背景

因为使用docker的时候还未配置过防火墙,前段时间手欠开启了防火墙配置,当然也不算手欠,这是安全标配。

那这跟我重启Docker有毛线的关系呢,且听我给你叨叨。不想听的直接滑到底部查看结果即可。
因为redis最开始未设置密码,导致被扫存在严重安全风险(由上可见安全意识多差😠)。所以想要重新启动一个容器并开启密码配置,结果报错了

[docker@VM_0_8 ~]#  docker run -d --name docker_redis -p 6379:6379 redis:latest --requirepass "docker6379"
72911593e322bc4bcafxxxxxxxxxxxx386c2e88008c0354cd055dfe94b15b
docker: Error response from daemon: driver failed programming external connectivity on endpoint redis (6fb5b584085d6012d2d108c71xxxxxxxxxx1549f188db812efd1578):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 6379 -j DNAT --to-destination 172.18.0.7:16701 ! -i docker0: iptables: No chain/target/match by that name.
 (exit status 1)).

至此就需要重启Docker了,终于回到正文了。如果有线上应用的话,这么直接重启dockerd内心怕是慌得一批吧。所以就需要优雅重启。

优雅重启

配置了docker live-restore之后,再次重启dockerd,不会重启容器的。

配置docker daemon参数

打开 /etc/docker/daemon.json,追加如下配置

{
// ....
"live-restore": true 
}
配置生效并验证

dockerd发送SIGHUP信号,dockerd收到信号后会reload配置

kill -SIGHUP $(pidof dockerd)

检查配置是否生效

docker info | grep -i live
# Live Restore Enabled: true
安心重启docker
systemctl restart docker

执行docker ps可以发现之前运行的容器状态未发生改变,优雅重启dockerd生效了。

后续

我们可以愉快的重启我们的redis容器了。

如果需要升级docker版本也是支持此特性的。相较17.06之前的版本容易出现dockerd内存泄漏的问题。我们可以直接升级对生产环境不会产生任何影响。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值