2017-08-04 6 views
0

ドッキングファイルでサービス(gunicorn、nginx)を開始しようとしていますが、そのエラーが発生しました。DockerfileでGunicornサービスを開始する:D-Bus接続を取得できませんでした。

は、これが私のdockerfileある

FROM centos:centos7 

RUN yum -y install epel-release 
RUN yum -y --enablerepo=base clean metadata 
RUN yum -y install nginx 
RUN yum -y install python-pip 
RUN pip install --upgrade pip 
RUN yum -y install systemd; 
RUN yum clean all; 

COPY ./

RUN pip install --no-cache-dir -r requirements.txt 

RUN ./manage.py makemigrations 
RUN ./manage.py migrate 

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/*; 

#Gunicorn 
RUN cp gunicorn_systemd /etc/systemd/system/gunicorn.service 
RUN systemctl start gunicorn 
RUN systemctl enable gunicorn 

そして、これは私のビルドコマンド

ドッカビルド-tのguni ./ある

任意のヘルプしてください?

答えて

0

あなたのビルドスクリプトにsystemdと対話しようとしている。

RUN systemctl start gunicorn 

多くの問題がここにあります。まず、ビルドプロセスの一環としてサービスを「開始」しようとしても意味がありません。コンテナを起動せずにイメージを構築することです。

第2に、systemdと対話しようとしていますが、あなたはsystemdを開始することは決してありません。[1]を望むことはありません。ドッカーコンテナは、通常、「単一プロセス」環境であるため、あなたのためにinit-likeプロセス管理者は必要ありません。必要なコマンドを自分で実行するだけです。

例としてApache httpdを取るのではなく、実行されている:

systemctl start httpd 

あなたが実行します:

httpd -DFOREGROUND 

これは、Webサーバを実行し、それが(ドッカーコンテナがフォアグラウンドになりますとどまることを保証しますフォアグラウンドプロセスが終了すると終了します)。確かにガンコンと似たようなことをすることができます。

コンテナにもCMDまたはENTRYPOINTというディレクティブがないため、明示的なコマンドを入力しない限り、実行しても何も起こりません。あなた本当にはあなたがsystemdに必要だと思う場合は

は、[1]、あなたはそれを開始するために配置する必要があるだろうというとき、コンテナが開始されると(例えば、CMD /sbin/init)が、systemdは非特権コンテナ環境でうまく走るものではありません。それは可能ですが、私はそれをお勧めしません。

関連する問題