web-dev-qa-db-ja.com

docker + systemctlを使用した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:RUN systemctl start httpd.service ---> 5989c6576ac9で実行中?[91m D-Bus接続の取得に失敗しました:操作は許可されていませんか?[0m?[31mERROR?[0m:サービス 'web'のビルドに失敗しました:コマンド '/bin/sh -c syste mctl start httpd.service 'がゼロ以外のコードを返しました:1

Obs:Windows7で実行中:(

ヒントはありますか?

6
JoeLoco

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
3
NetworkMeister

同じ問題について、私は docker-systemctl-replacement を作成しました。これは、「systemctl start httpd.service」が実行する手順を実行しますが、SystemDを実行する必要はありません。 「systemctl.pystarthttpd.service」と言って、それが機能するかどうかを確認してください。

1