操作不允许:使用docker + systemctl的systemctl

8

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

docker-compose.yml

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

命令

docker-compose build
错误:
第6步: 运行systemctl start httpd.service ---> 正在运行5989c6576ac9
?[91m无法获取D-Bus连接:操作不允许
?[0m?[31m错误?[0m:服务'web'构建失败:命令'/bin/sh -c systemctl start httpd.service'返回非零代码:1 注意: 运行在Windows 7 :(
有什么提示吗?

1
你找到这个问题的解决方案了吗?我尝试了那个答案,但对我没有用,甚至连centos/systemd镜像也不行。 - Mostafa Hussein
答案对你有用吗?对我来说它不起作用。 - Himanshu sharma
2个回答

4

正如在 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 删除了一些可能会引起问题的单元文件。从这里开始,您就可以构建基础镜像了。
$ 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

这对我没有用,我在构建Docker镜像时仍然遇到相同的“操作不允许”错误。 - B T

1

针对同样的问题,我创建了一个docker-systemctl-replacement,它将执行"systemctl start httpd.service"所需的步骤...但不需要运行SystemD。只需输入"systemctl.py start httpd.service",看看是否有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接