dockerのcentos7イメージ上で、yumで入れたhttpdを起動します。systemd経由では起動しないので、httpdを直接たたきます。
systemd経由ではエラーが出る
開発環境でcentos7のhttpdを再現したいとき、Dockerfileはこんな感じになります。
FROM centos:7
MAINTAINER noldor
RUN yum -y install httpd
CMD ["systemctl", "start", "httpd.service"]
しかし、これだとエラーが出ます。
Failed to get D-Bus connection: Operation not permitted
もしくは Failed to get D-Bus connection: No connection to service manager.
と出るようです。
systemdを経由せずhttpdを直接起動する
これを何とかするために --privileged
で特権をつける、そのためにコンソールに入る、というようなことがググると出てきます。Operation not permitted
なので権限を与えてやる発想と思いますが、D-Busを要求するのはhttpdではなくsystemdなので、systemctlを経由しなければこのエラーは出ません。
というわけで次のようにします。
FROM centos:7
MAINTAINER noldor
RUN yum -y install httpd
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
この起動コマンドは /usr/lib/systemd/system/httpd.service
の中に書いてあります。
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
$OPTIONS
は /etc/sysconfig/httpd
の中で定義するものですが、デフォルトでは空っぽなので /usr/sbin/httpd -DFOREGROUND
と同じになります。
systemdでは自動起動や再起動を管理していますが、開発環境ではdockerイメージまるごと起動したり落としたりになるでしょうからsystemdを経由する必要はなく、こちらのほうが素直です。コンソールを使わずにdocker-composeで管理できるようになります。
最近のコメント