使用docker + systemctl操作不允许systemctl

Dockerfile

FROM centos:7 ENV container docker VOLUME ["/sys/fs/cgroup"] RUN yum -y update RUN yum install -y httpd RUN systemctl start httpd.service ADD . /code WORKDIR /code 

泊坞窗,compose.yml

 version: '2' services: web: privileged: true build: . ports: - "80:80" volumes: - .:/code 

命令

 docker-compose build 

错误

第6步:运行systemctl start httpd.service —>在5989c6576ac9中运行?[91mFailed得到D-Bus连接:操作不允许?[0m?[31mERROR?[0m:Service'web'failed to build: / bin / sh -c系统mctl启动httpd.service'返回一个非零的代码:1

Obs :在Windows 7上运行:(

任何小费?

正如在centos docker镜像库中所解释的那样,Systemd在默认情况下是不活动的。 为了使用systemd,你将需要包含类似于下面的示例Dockerfile的文本:

 FROM centos:7 MAINTAINER "you" <your@email.here> 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"] 

这个Dockerfile会删除一些可能导致问题的单元文件。 从这里,你已经准备好build立你的基本形象。

 $ docker build --rm -t local/c7-systemd . 

为了使用上面创build的启用systemd的基础容器,您需要将Dockerfile更改为:

 FROM local/c7-systemd ENV container docker VOLUME ["/sys/fs/cgroup"] RUN yum -y update RUN yum install -y httpd RUN systemctl start httpd.service ADD . /code WORKDIR /code 

对于同样的问题,我创build了一个docker-systemctl-replacement ,它将执行“systemctl start httpd.service”所要做的步骤…但不需要运行SystemD。 只要说“systemctl.py启动httpd.service”,看看是否有效。