💡 一、错误1

1.启动报的第一个错 Docker CentOS Failed to get D-Bus connection: Operation not permitted,解决方式就是更换systemctl 文件,将原文件备份

1
sudo mv /usr/bin/systemctl /usr/bin/systemctl.bak

2.然后下载文件。地址如下:

https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py
(访问不了就用下面这个镜像的)
https://raw.gitmirror.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py

1
sudo curl -L -o /usr/bin/systemctl https://raw.gitmirror.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl.py

3.然后重新给他执行权限

1
chmod +x /usr/bin/systemctl

💡 二、错误2

1.看状态不行,就去编辑,然后就可以了

1
vi /usr/lib/systemd/system/docker.service
1
2
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd

💡 三、成功

📚 总结

先来了解下systemd是什么东东?它并不是一个命令,而是一组命令,涉及到系统管理的各个方面。根据Linux惯例,字母d是守护进程 (daemon) 的缩写,systemd这个名字的含义就是要守护整个系统。init和systemd都是Linux的守护进程, 但后者功能更强大,已取代init (initd的PID是0) 成为Linux系统的第一个进程 (systemd的PID是1)。

  • systemctl是systemd的主命令,用于管理系统。除此之外,还有hostnamectl(查看当前主机信息)、timedatectl(查看当前时区设置)、loginctl(查看当前登录的用户)等命令。
  • 为什么CentOS在WSL里会出现上述错误呢?想必你也猜到一半了,没错,就是systemd没有启用引起的(WSL2现已支持)。Ubuntu发行版默认安装已启用systemd,而其它Linux发行版上默认还是init,需要手动启用才行。可以通过以下命令来查看:ps --no-headers -o comm 1

💬 讨论
欢迎在评论区讨论: