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

Joe*_*oco 6 centos docker 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
Run Code Online (Sandbox Code Playgroud)

泊坞窗,compose.yml

version: '2'
services:
web:
   privileged: true
   build: .
   ports:
    - "80:80"
   volumes:
    - .:/code
Run Code Online (Sandbox Code Playgroud)

命令

docker-compose build
Run Code Online (Sandbox Code Playgroud)

错误:

第6步:运行systemctl启动httpd.service --->运行中5989c6576ac9 [91mFailed得到d-bus接口:不允许操作[0分[31mERROR [0米:???服务 '网站' 未能建立:命令"/bin/sh -c syste mctl start httpd.service'返回非零代码:1

Obs:在Windows 7上运行:(

有提示吗?

Net*_*ter 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"]
Run Code Online (Sandbox Code Playgroud)

此 Dockerfile 删除了许多可能导致问题的单元文件。从这里开始,您就可以构建基础映像了。

$ docker build --rm -t local/c7-systemd .
Run Code Online (Sandbox Code Playgroud)

为了使用上面创建的启用 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
Run Code Online (Sandbox Code Playgroud)