现象
docker swarm init 初始化swarm网络报错
Error response from daemon: --live-restore daemon configuration is incompatible with swarm mode
原因
–live-restore:在 Docker守护进程崩溃或重启时保持容器运行状态
Swarm 模式:容器的运行状态由 Swarm 管理,并且容器会自动重启到其他节点上
由此可见swarm 与 live-restore参数存在冲突 如果想要启动swarm需要 配置 live-restore = false
解决
如果启动了 live-restore 有两种情况
一、
在文件 /etc/docker/daemon.json中存在以下配置
{
"live-restore": true
}
这种情况很简单直接把 ture 修改为 false 或者删掉这条配置,保存退出后重启docker进程即可
sudo systemctl restart docker
配置修改后重启docker进程
二、
当文件 /etc/docker/daemon.json 中不存在以下配置时或者 这个文件不存在时 那一定是dockerd 启动时带了这个这个参数
因为如果没有配置 默认 false
systemctl status docker.service
执行上面命令输出如下 可以看到 启动的时候带了 --live-restore 参数
根据loaded项可以得到启动的哪个 docker.service服务
打开docker.service文件 如下
在文件中找到 ‘ExecStart’ 这一项将 dockerd 后面的 --live-restore删掉 保存退出
修改了docker.server 文件后不能直接执行systemctl restart docker 会有异常提示如下:
The unit file, source configuration file or drop-ins of docker.service changed on disk. Run ‘systemctl daemon-reload’ to reload units
根据提示 运行以下命令 通知 systemd 系统管理器重新加载配置文件
systemctl daemon-reload
配置文件加载好后重启docker进程
systemctl restart docker
如下图:
结束
至此 docker swarm init 失败的问题已经解决
注:
在上面提到的第二种情况中
如果不修改docker.service 中的启动参数而是在daemon.json配置文件中配置 live-restore:false 这将导致无法启动docker进程
他会提示你docker 启动参数 和 daemon.json中都包含了这个参数且不一样,他不知道使用哪个的异常。