2017-08-28 14 views
1

私はPythonアプリケーションのためにDockerfileを書いています。Linuxの画面でデタッチモードのdockerでpythonプロセスを実行する

要件は次のとおりです。

  • が&開始MySQLサーバをインストールします。
  • アプリケーションをデタッチモードで画面で実行します。

    FROM ubuntu:16.04 
    
    # Update OS 
    RUN apt-get update 
    RUN apt-get -y upgrade 
    
    # Install Python 
    RUN apt-get install -y python-dev python-pip screen npm vim net-tools 
    RUN DEBIAN_FRONTEND=noninteractive apt-get -y install mysql-server python-mysqldb 
    
    RUN mkdir -p /usr/src/app 
    WORKDIR /usr/src/app 
    
    COPY requirements.txt /usr/src/app 
    RUN pip install --no-cache-dir -r requirements.txt 
    
    COPY src /usr/src/app/src 
    COPY ./src/nsd.ini /etc/ 
    
    RUN pwd 
    RUN cd /usr/src/app 
    
    RUN service mysql start 
    RUN /bin/bash -c "chmod +x src/run_demo_app.sh && src/run_demo_app.sh" 
    

    は、以下の問題は、MySQLが起動しないでbashスクリプト

    $ cat src/run_demo_app.sh 
    
    $ screen -dm bash -c "sleep 10; python -m src.app"; 
    

    の内容です:

以下は私のDockerfileです。私はコンテナから手動で起動する必要があります。

また、画面が消えてアプリケーションが起動しなくなります。手動でスクリプトを実行すると正常に動作します。

答えて

2

これは分かりやすいギャップです。ドッカーがinitシステムを使用していない

RUN service mysql start 

serviceコマンドを使用しないでください

あなたのドッキングウィンドウのファイルに問題の下に注意してください。したがって、ドッカー内でserviceコマンドを使用しないでください。

はあなたが同じコンテナにすべてを置くべきではありません同じコンテナ

ですべてを入れないでください。だから、mysqlは独自の

使用公式画像

あなたは、車輪を再発明する必要はありませんで、独自のコンテナやPythonで実行する必要があります。可能な限り公式画像を使用してください。あなたがdocker-composeを使用し、複数のサービスを必要としているので、複数のサービスがあなたのケースでは

を必要としているとき、あなたはあなたのケースで

使用ドッキングウィンドウ-コンをmysqlpython画像を使用する必要があります。

あなたは、あなたのプロセスでも、あなたのSSHが接続を切断すると実行していることにしたいとき

画面が使用されているドッキングウィンドウで画面を使用する必要はありません。それで、ドッカーでは不要です。 docker runまたはdocker-compose upコマンドをさらに実行して-dフラグを指定すると、コンテナが自動的にバックグラウンドで起動されます。

+0

編集と回答のために@Tarun Lalwaniありがとうございました。私は、ドッカーが作成し、別のコンテナとして 'mysql'を実行していることを認識しています。しかし、私の必要条件は、単一のコンテナで実行することです。そのため、サービスとして「mysql」を開始しようとしました。失敗の理由を指摘してくれてありがとう。私は画面を使用し、画面が使えない理由を見たくない。もっと重要なのは、コンテナの開始時になぜ失敗したのかを理解したいのです。 – nebi

+0

@nebi、この記事がhttp://tarunlalwani.com/post/deploying-code-inside-docker-images-statically-dynamically/に役立つかどうかをご覧ください。スーパーバイザーを使用するためのセクションがあります。これはあなたのケースで使用する必要があります –

関連する問題