2017-08-31 7 views
0

私は最近ドッカーにウェブサービスを移植しています。タイトルで述べたように、私はdocker run -ditを使って実行すると、サービスはバックグラウンドで実行されますが、docker-compose.ymlを使用するとサービスが終了するという奇妙なシナリオに遭遇しています。イメージはdocker run -ditを使用して正常に動作しますが、ドッカースタックを使用して終了しますdeploy -c

明確にするために、私は私のDockerfileにこのエントリポイントを持っている:

ENTRYPOINT ["/data/start-service.sh"] 

これはstart-service.shのコードです:

#!/bin/bash 
/usr/local/bin/uwsgi --emperor=/data/vassals/ --daemonize=/var/log/uwsgi/emperor.log 
/etc/init.d/nginx start 
exec "[email protected]"; 

あなたが見ることができるように、私はちょうどよこのシェルスクリプトでuwsgiとnginxをここで起動します。最後の行(exec)は、スクリプトにパラメータを受け入れ、実行させ続けるだけです。次に、私はこれを使用してこれを実行します。

docker run -dit -p 8080:8080 --name=web_server webserver /bin/bash 

前述のように、サービスは正常に実行され、Webサービスにアクセスできます。

今、私はこれをdocker-compose.ymlを使って展開しようとしましたが、サービスは終了/シャットダウンし続けます。私はログを取得しようとしましたが、私は成功しません。 のdocker ps -aは、1秒間または2回(または3回)実行されてから終了します。

は、ここに私のドッキングウィンドウ-compose.ymlです:YMLファイル内

version: "3" 
services: 
    web_server: 
    image: webserver 
    entrypoint: 
     - /data/start-service.sh 
     - /bin/bash 
    ports: 
     - "8089:8080" 
    deploy: 
     resources: 
     limits: 
      cpus: "0.1" 
      memory: 2048M 
     restart_policy: 
      condition: on-failure 
    networks: 
     - webnet 

networks: 
    - webnet 

エントリポイントのエントリがちょうどstart-service.shスクリプトは、そのパラメータとして/ binに/ bashをして実行されることを確認することです、サービスを実行し続けるしかし再び、サービスは停止します。

+0

これらのコマンドからログを提供できますか? 'docker service ls''ドッカーサービスログ ' – yamenk

+0

@yamenk - 返事をありがとう。私はすでにそれらのコマンドをしたが、結果は得られなかった。 stdin/terminalも現在の作業ディレクトリのファイルでもありません – jaysonpryde

答えて

1

bash適切なttyなしで終了します。 bashexecで実行すると、PID 1になります。PID 1が終了するたびに、コンテナが停止します。

これを防ぐには、tty: trueを作成ファイルのサービスの説明に追加します。これは基本的にdocker runコマンドで-tと同じことです。

+0

ありがとう!それは問題を解決した – jaysonpryde

関連する問題