不允许操作 systemctl with docker + systemctl
Operation not permitted systemctl with 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
docker-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: 服务 'web' 构建失败:命令 '/bin/sh -c 系统
mctl start httpd.service' 返回了一个非零代码:1
Obs: 运行 在 windows 7 :(
有什么建议吗?
如 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
对于相同的问题,我创建了一个 docker-systemctl-replacement,它将执行 "systemctl start httpd.service" 会执行的步骤...但不需要 运行 SystemD。只需说 "systemctl.py start httpd.service",看看是否有效。
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 启动 httpd.service ---> 运行 在 5989c6576ac9 ?[91m未能获得 D-Bus 连接:不允许操作 ?[0m?[31mERROR?[0m: 服务 'web' 构建失败:命令 '/bin/sh -c 系统 mctl start httpd.service' 返回了一个非零代码:1
Obs: 运行 在 windows 7 :(
有什么建议吗?
如 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
对于相同的问题,我创建了一个 docker-systemctl-replacement,它将执行 "systemctl start httpd.service" 会执行的步骤...但不需要 运行 SystemD。只需说 "systemctl.py start httpd.service",看看是否有效。