之前看到的方案都是说在启动容器的时候添加–privileged=true
就可以了。试了n遍,问题还是没有解决,奔溃了一段时间,继续找答案。发现了一个说法是:据说在 Linux Docker
中无法使用 systemd(systemctl)
相关命令的原因是 0 号进程不是 init
,而是其他例如 /bin/bash
,所以导致缺少相关文件无法运行。
具体的解决方案是通过 init
在后台运行一个 docker
容器,然后再通过 exec
的方式进入到容器中,不过需要注意的是不同的系统 init
程序的路径不同。
例如 CentOS 7 ,
docker run -tid --name test --privileged=true centos:latest /usr/sbin/init
docker exec -it test /bin/bash
再例如 Ubuntu 16.04
docker run -tid --name test_2 --privileged=true ubuntu:16.04 /sbin/init
docker exec -it test_2 /bin/bash
总结下来就是:
- 启动容器的时候添加
–privileged=true
- 通过
init
在后台运行一个docker
容器