当使用docker安装centos:7镜像或centos:latest后,如果执行systemctl时,会出现以下问题
[root@68903c5fbdeb /]# systemctl stop firewalld.service
Failed to get D-Bus connection: Operation not permitted
这是docker中centos7的bug,官网上也提到了这个问题,Docker的官方CentOS镜像中没有提供systemd服务,并给出了 解决办法,虽然复杂了一点,还是可以处理的。
1、创建systemd的base image
新建一个文件 Dockerfile,这是构建docker镜像时默认读取的文件名称,也可以使用其它文件名,然后在构建时使用 -f 指定文件名即可
vi Dockerfile
输入以下内容
FROM centos:latest
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]
执行创建镜像命令(注意:记得命令最后要加个空格和点,否则会报错)
docker build --rm -t centos:c7-systemd .
2、基于该镜像创建http服务的镜像
重新编辑Dockerfile文件
vi Dockerfile
删除原来的内容,输入以下内容
FROM centos:c7-systemd
RUN yum -y install httpd; yum clean all; systemctl enable httpd.service
EXPOSE 80
CMD ["/usr/sbin/init"]
构建docker镜像(注意:记得命令最后要加个空格和点,否则会报错)
docker build --rm -t centos:c7-systemd-httpd .
3、使用新的镜像来创建centos7容器
记得要加上 --privileged,官方给的示例没有这个参数,执行时会报错,加上之后就不会了
docker run --privileged -it --name mycentos -d -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 80:80 centos:c7-systemd-httpd
4、进入docker容器执行systemctl
docker exec -it mycentos bin/bash
执行
systemctl start sshd.service
虽然现在没有提示 Failed to get D-Bus connection: Operation not permitted 问题,但却提示
[root@21481fb2cefc /]# systemctl start sshd.service
Failed to get D-Bus connection: No such file or directory
而查了systemctl的服务路径
ls /usr/lib/systemd/system | grep sshd.service
是存在 sshd.service 服务的,但执行systemctl却说是找不到文件,很奇怪
执行 systemctl enable sshd.service 也不行
[root@21481fb2cefc /]# systemctl enable sshd.service
Failed to get D-Bus connection: No such file or directory
这个问题还暂时找不到解决办法,后面继续研究
欢迎关注本人的微信公众号“大数据与人工智能Lab”(BigdataAILab),获取更多资讯