使用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”,看看是否有效。