问题:
在docker容器中使用systemctl
命令报错
[root@707a5892dae2 /]# systemctl start nginx
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
原因:
默认情况下,在第一步执行的是/bin/bash
,而docker中的bug,无法使用systemctl
;
所以使用/usr/sbin/init
同时添加--privileged=true
参数就能够使用systemctl
了,但覆盖了默认的/bin/bash,因此我们想进入容器就不能使用docker attach
了;而只能使用docker exec -it <dockername> /bin/bash
解决办法:
运行容器时添加--privileged=true
,修改/bin/bash
为/usr/sbin/init
;
[root@919 ~]# docker run -itd --name nginxv2 --privileged=true centos /usr/sbin/init
# --privileged: 指定容器是否是特权容器。
验证:
[root@919 ~]# docker exec -it nginxv2 /bin/bash
[root@491ab139e4fd /]# systemctl start nginx
[root@491ab139e4fd /]# ps -ef |grep nginx
root 187 1 0 02:32 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 188 187 0 02:32 ? 00:00:00 nginx: worker process