本文主要是介绍解决Docker Swarm集群模式下部署Centos执行Systemctl报错问题:“Failed to get D-Bus Connection: Operation not permitted“,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题
在Docker Swarm模式下, 出于安全考虑, 迄今的版本都不支持privileged参数把权限完全放开,单节模式下采用docker run 命令是可以支持privileged参数, 但这样无法利用Docker Swarm集群对所有docker节点进行管理以及网络的通信配置, 这样就导致通过Docker Swarm集群部署centos容器时, 出现Failed to get D-Bus Connection: Operation not permitted等权限相关问题,网上搜索了很多资料, 都不全面, 即使centos的docker hub官方说明也没做详细描述。
解决方法
1. 单节点模式:
docker run -ti --tmpfs /tmp --tmpfs /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 80:80 local/centos7-systemd
2. 集群模式:
docker-compose.yml配置文件:
增加参数
volumes: - /sys/fs/cgroup:/sys/fs/cgroup:ro
tmpfs:- /tmp- /run
cap_add:- ALL
cap_add允许我们为容器分配额外的能力,以便能够执行某些需要这些能力的任务,
为ALL代表开放所有功能,
常见的cap_add参数包括:
NET_ADMIN:允许容器修改网络配置
SYS_ADMIN:允许容器执行系统管理任务
SYS_PTRACE:允许容器使用ptrace系统调用来追踪和调试其他进程
SYS_TIME:允许容器修改系统时间
SYSLOG:允许容器写入系统日志
IPC_LOCK:允许容器锁定内存页,防止其被换出内存
SYS_RESOURCE:允许容器修改系统资源限制
配置完整示例:
通过 docker statck deploy -c docker-compose.yml hadoop 进行部署
进入容器, 执行systemctl status sshd, 不再报错:
这篇关于解决Docker Swarm集群模式下部署Centos执行Systemctl报错问题:“Failed to get D-Bus Connection: Operation not permitted“的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!