解决这个问题就是要系统启动好后,重启一下Docker服务
在 Ubuntu 中系统和网络启动后 60 秒执行 sudo service docker restart
以下是基于 systemd 的解决方案,确保在系统和网络就绪后再延迟 60 秒执行命令,去除了日志记录功能。
使用 systemd 服务实现网络启动后延迟执行
操作步骤:
-
创建一个 systemd 服务文件:
bash
sudo vi /etc/systemd/system/restart-docker-delayed.service
-
输入以下内容(直接粘贴到文件中):
[Unit] Description=Restart Docker 60 seconds after system and network are ready After=docker.service network-online.target [Service] Type=oneshot ExecStartPre=/bin/sleep 60 ExecStart=/usr/sbin/service docker restart RemainAfterExit=yes [Install] WantedBy=multi-user.target
-
保存并退出(Ctrl+O,回车,Ctrl+X)。
-
重新加载 systemd 并启用服务:
bash
sudo systemctl daemon-reload sudo systemctl enable restart-docker-delayed.service
-
重启系统测试:
bash
sudo reboot
说明:
-
After=docker.service network-online.target:
-
docker.service:依赖 Docker 服务启动。
-
network-online.target:确保网络完全就绪。
-
-
ExecStartPre=/bin/sleep 60:在网络和系统就绪后额外等待 60 秒。
-
ExecStart=/usr/sbin/service docker restart:直接重启 Docker,去除了日志记录。
验证:
-
重启后,检查服务状态:
bash
systemctl status restart-docker-delayed.service
-
检查 Docker 是否运行:
bash
docker ps
如果需要免密码执行 sudo
如果 sudo service docker restart 需要密码,可以配置免密:
-
编辑 sudoers 文件:
bash
sudo visudo
-
添加一行(将 username 替换为你的用户名):
username ALL=(ALL) NOPASSWD: /usr/sbin/service docker restart
-
保存退出。