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 服务使配置生效。
更多推荐
所有评论(0)