Ubuntu22.04下使用systemctl无法启动Docker服务的问题求助
解决Docker通过systemctl启动失败的问题
问题原因
Docker的systemd服务配置文件(默认路径为/lib/systemd/system/docker.service)中,ExecStart参数已经指定了监听套接字(比如-H unix:///var/run/docker.sock),而你在/etc/docker/daemon.json里又配置了hosts字段——Docker守护进程只能通过一种方式设置监听地址,两种配置同时存在会触发冲突,导致systemctl启动失败。手动执行dockerd时没有加载systemd的默认参数,所以能正常运行。
解决方法
方法一:修改systemd服务文件,移除默认监听参数
- 编辑Docker的systemd服务文件:
sudo nano /lib/systemd/system/docker.service - 找到
ExecStart行,删除末尾的-H fd://或-H unix:///var/run/docker.sock参数,修改后示例:ExecStart=/usr/bin/dockerd - 重新加载systemd配置并重启服务:
sudo systemctl daemon-reload sudo systemctl restart docker
方法二:将监听配置移到systemd参数,保留daemon.json其他设置
- 编辑
/etc/docker/daemon.json,删除hosts字段,修改后内容:{ "dns": ["8.8.4.4","8.8.8.8"] } - 编辑Docker的systemd服务文件:
sudo nano /lib/systemd/system/docker.service - 修改
ExecStart行,添加TCP和Unix套接字参数:ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://localhost:2375 - 重新加载systemd配置并重启服务:
sudo systemctl daemon-reload sudo systemctl restart docker
验证
执行以下命令确认服务状态:
sudo systemctl status docker
也可以测试TCP套接字是否正常工作:
curl http://localhost:2375/version
内容的提问来源于stack exchange,提问作者cicciosgamino
相关产品推荐
相关产品推荐

