使用docker + systemctl进行操作不允许使用systemctl

时间:2016-05-28 14:26:36

标签: docker centos 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启动httpd.service  --->在5989c6576ac9中运行 ?[91m无法获得D-Bus连接:不允许操作 ?[0m?[31mERROR?[0m:Service' web'无法构建:命令' / bin / sh -c syste mctl启动httpd.service'返回非零代码:1

Obs :在Windows 7上运行:(

任何提示?

2 个答案:

答案 0 :(得分:3)

正如centos docker image repository中所述,默认情况下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删除了许多可能导致问题的单元文件。从这里开始,您就可以构建基本图像了。

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

要使用上面创建的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

答案 1 :(得分:1)

对于同样的问题,我创建了一个docker-systemctl-replacement,它将执行&#34; systemctl启动httpd.service&#34;会做...但不需要运行SystemD。只需说&#34; systemctl.py启动httpd.service&#34;看看是否有效。