1

私はdockerenvorinmentsを自動化するために作業を開始しています。次に、単純なLAMPものを構築しようとしDockerfileています。次のとおりです。

FROM centos:7

ENV container=docker

RUN yum -y swap -- remove systemd-container systemd-container-libs -- install systemd systemd-libs

RUN yum -y update; yum clean all; \
(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" ]

RUN yum -y update && yum clean all
RUN yum -y install firewalld httpd mariadb-server mariadb php php-mysql php-gd php-pear php-xml php-bcmath php-mbstring php-mcrypt php-php-gettext

#Enable services
RUN systemctl enable httpd.service
RUN systemctl enable mariadb.service

#start services
RUN systemctl start httpd.service
RUN systemctl start mariadb.service

#Open firewall ports
RUN firewall-cmd --permanent --add-service=http
RUN firewall-cmd --permanent --add-service=https
RUN firewall-cmd --reload


EXPOSE 80
CMD ["/usr/sbin/init"]

だから私がイメージを構築するとき

docker build -t myimage .

次に、コードを実行すると、次の間違いが発生します。

The command '/bin/sh -c systemctl start httpd.service' returned a non-zero code: 1

インタラクティブモードに入ると(コマンドをジャンプしRUN systemctl start httpd.serviceて画像を再構築します):

docker run -t -i myimage /bin/bash

そして、サービスhttpdを手動で開始しようとすると、次の間違いが発生します。

Failed to get D-Bus connection: No connection to service manager.

だから、私は何が間違っているのか分かりませんか?

4

2 に答える 2

0

これは、私の docker-systemctl-replacementが適合する完璧な例のように見えます。アクティブなSystemDがなくても、「systemctl start httpd.service」を簡単に解釈できます。私はいくつかのデータベースサービスに対して同じことをしましたが、具体的には mariadb.service ではありません - 試してみてください。

于 2017-03-23T14:58:48.290 に答える