这个命令由两部分通过 && 连接组成,整体作用是重新加载 systemd 配置后重启 Docker 服务


逐部分解释

1. systemctl daemon-reload

  • 作用:通知 systemd 重新读取所有单元文件(unit files)的配置,不重启任何服务

  • 什么时候需要执行

    • 修改了 /etc/systemd/system//lib/systemd/system/ 下的服务配置文件(如 docker.service

    • 新增、删除或修改了 .service.socket.timer 等单元文件

    • 修改了服务的 ExecStartEnvironmentLimitNOFILE 等参数后

  • 注意:仅仅修改配置文件不会自动生效,必须执行此命令让 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)

注意事项

  1. 容器会中断restart docker 会停止所有正在运行的容器,生产环境执行前请确认影响。

  2. 数据卷不受影响:容器停止不会删除数据卷(volumes)和绑定挂载,重启后重新挂载即可。

  3. 自动重启策略:如果容器设置了 --restart=always/unless-stopped,Docker 服务重启后这些容器会自动重新启动。

  4. 权限要求:两条命令都需要 root 权限(或使用 sudo)。


总结

systemctl daemon-reload && systemctl restart docker修改 Docker 相关配置后的标准重启流程

  • 先让 systemd 识别最新配置 → 再重启 Docker 服务使配置生效。

更多推荐