2016-05-28 17 views
5

Dockerfile操作不允许systemctl与搬运工+ systemctl

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 运行[91mFailed得到d-bus接口:操作不允许 [0分[31mERROR [0米???服务 '网站' 未能建立:命令 '/ bin/sh的-c SYSTE MCTL开始httpd.service' 返回非零代码:1个

观测数据:在Windows上运行7 :(

任何提示?

+1

您是否找到了解决此问题的解决方案?我试过答案,但我不为我工作,甚至没有centos/systemd图像 –

+0

答案适合你吗?对我来说它不起作用 –

回答

1

正如在centos docker image repository中所解释的那样,默认情况下Systemd未处于活动状态。为了使用systemd,您将需要包括类似于示例文本Dockerfile如下:

FROM centos:7 
MAINTAINER "you" <[email protected]> 
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 
+0

这对我来说不起作用,在建造码头图像时我仍然得到相同的操作不允许错误 –

+0

这是行不通的。 –

+0

https://hub.docker.com/_/centos/ –

1

对于我创建了一个docker-systemctl-replacement相同的问题,它会做的步骤, “systemctl start httpd.service”会做...但不需要运行SystemD。只要说“systemctl.py start httpd.service”,看看是否有效。