怎么以特权模式运行容器
- 2019 年 12 月 5 日
- 筆記
背景:在容器中执行 kubectl start 命令启动服务时报错:
[root@1ac7516661e1 /]# systemctl start nginx Failed to get D-Bus connection: Operation not permitted
小编这里是使用docker run 启动的容器,相信很多小伙伴刚接触容器的时候应该都遇到过这个问题。
这里针对这个问题,小编分别从docker 和 kubernetes 两个维度来分析怎么解决这个问题。
先查看报错原因:
https://forum.huawei.com/enterprise/zh/thread-427747-1-1.html
可以参考这里面的方法,问题原因这里 说的还是比较详细的
文档中也有针对docker 环境解决方案做说明:
话不多说,这里直接输出问题解决方案:
Docker环境:
容器时添加 –privileged=true 参数 并使用 /usr/sbin/init 的运行环境
创建容器:
# docker run -d -name centos7 --privileged=true centos:7 /usr/sbin/init
进入容器:
# docker exec -it centos7 /bin/bash
这样可以使用systemctl启动服务了。
ps:这里不建议直接使用特权模式以 docker run -it 这种模式进入容器,如果以特权模式创建容器,
会检查很多启动项,最终也会处于卡死的情况,类似下面这样:
以特权模式运行容器的效果
k8s集群环境
针对k8s 集群环境怎么创建特权级容器,网上并未找到特别详细的说明文档,这里也是参考docker 环境中的操作,加上自己的不断试验,整理操作方式给到大家。
通过上面docker 环境 可以看出,是需要添加 –privileged=true 和 /usr/sbin/init 运行环境。
k8s 创建容器资源的时候同样是需要在yaml 文件中指定这两个参数:
进入k8s 创建的pod 测试效果:
TKE 集群环境:
如果使用腾讯云TKE 集群环境,可以在控制台图形化界面创建容器,相关配置:
集群——工作负载——deployment(为例)—— 容器——显示高级设置