systemctl daemon-reload systemctl restart docker 解释并说明下这个命令
这个命令由两部分通过&&连接组成,整体作用是重新加载 systemd 配置后重启 Docker 服务。
逐部分解释
1.systemctl daemon-reload
作用:通知 systemd 重新读取所有单元文件(unit files)的配置,不重启任何服务。
什么时候需要执行:
修改了
/etc/systemd/system/或/lib/systemd/system/下的服务配置文件(如docker.service)新增、删除或修改了
.service、.socket、.timer等单元文件修改了服务的
ExecStart、Environment、LimitNOFILE等参数后
注意:仅仅修改配置文件不会自动生效,必须执行此命令让 systemd 重新加载。
2.&&
逻辑与运算符,表示只有前一个命令成功退出(返回码为 0)时,才执行后面的命令。
如果
daemon-reload失败,后面的restart docker不会执行,避免在配置异常时贸然重启服务。
3.systemctl restart docker
作用:停止并重新启动 Docker 服务。
效果:
所有运行中的容器会被停止(除非配置了
--restart=always等策略,服务重启后可能会按策略重新启动容器)Docker 守护进程(dockerd)会重新初始化
应用新的配置(如
/etc/docker/daemon.json的修改,或 systemd 单元文件中的环境变量、启动参数等)
典型使用场景
| 场景 | 说明 |
|---|---|
| 修改 Docker 的 systemd 单元文件 | 比如调整docker.service中的ExecStart参数、添加代理环境变量等 |
修改/etc/docker/daemon.json | 更改 Docker 守护进程配置(如存储驱动、日志选项、镜像加速地址等) |
| 安装/升级 Docker 后 | 确保 systemd 识别到最新的服务定义 |
与相关命令的区别
| 命令 | 作用 |
|---|---|
systemctl daemon-reload | 仅重新加载 systemd 配置,不重启服务 |
systemctl restart docker | 重启服务,但不重新加载 systemd 配置 |
systemctl reload docker | 尝试在不停止服务的情况下重新加载配置(Docker 通常不支持,一般用 restart) |
注意事项
容器会中断:
restart docker会停止所有正在运行的容器,生产环境执行前请确认影响。数据卷不受影响:容器停止不会删除数据卷(volumes)和绑定挂载,重启后重新挂载即可。
自动重启策略:如果容器设置了
--restart=always/unless-stopped,Docker 服务重启后这些容器会自动重新启动。权限要求:两条命令都需要root 权限(或使用
sudo)。
总结
systemctl daemon-reload && systemctl restart docker是修改 Docker 相关配置后的标准重启流程:
先让 systemd 识别最新配置 → 再重启 Docker 服务使配置生效。
