原文链接:《Ginfoo · docker 容器使用 systemctl 命令是报错》
报错内容
System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down
解决方法
docker run -itd --privileged --name myCentos centos /usr/sbin/init
# --privileged 是特权模式,开启了才能使用 systemctl
# -d 是守护模式,开启之后,退出容器时,不会关闭容器
创建完成后,使用以下命令进入容器
docker exec -it myCentos bash
原因
默认情况下,在第一步执行的是 /bin/bash
,而因为 docker 中的 bug,无法使用 systemctl
。
所以我们使用了 /usr/sbin/init
,同时 --privileged
这样就能够使用 systemctl
了,但覆盖了默认的 /bin/bash
因此我们如果想进入容器,就不能再使用 docker attach myCentos
,而只能使用 docker exec -it myCentos /bin/bash
, 因为 exec
可以让我们执行被覆盖掉的默认命令 /bin/bash
。
同时 -it
也是必须的。