質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

27868閲覧

docker-composeを実行後、exited with code 0ですぐに落ちてしまう。

Daimian

総合スコア53

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/02/19 16:08

前提・実現したいこと

pythonの実行環境をdockerで作成し、バッチ処理を行うスクリプトを書いています。下記のdocker-composeの内容で環境を構築し、いざ実行してみると下記のようなエラー?が出て、すぐにコンテナが落ちてしまいます。

発生している問題・エラーメッセージ

creating kaminari_python ... done Attaching to kaminari_python kaminari_python exited with code 0

該当のソースコード

docker-compose.yml

version: '3' services: python: build: context: ./ dockerfile: Dockerfile_python tty: true container_name: kaminari_python volumes: - ./kaminari_python/task:/app/kaminari_python/task:rw - ./kaminari_API/app/assets/csv:/app/kaminari_python/csv:rw - ./kaminari_API/tmp/storage/nc:/app/kaminari_python/nc:rw - ./kaminari_python/cron/python_cron:/etc/cron.d/python_cron - ./kaminari_python/sh/python.sh:/app/kaminari_python/sh/python.sh - ./start_python.sh:/usr/local/bin/start_python.sh:rw working_dir: /app/kaminari_python command: bash /usr/local/bin/start_python.sh

Dockerfile_python

FROM python:3 RUN pip install --upgrade pip RUN pip install --upgrade setuptools RUN python -m pip install numpy RUN python -m pip install glob3 RUN python -m pip install netCDF4 RUN python -m pip install csv23 RUN python -m pip install picklable-itertools RUN python -m pip install pytz RUN python -m pip install datetime2 RUN apt-get update RUN apt-get install -y vim RUN apt-get install -y cron

start_python.sh

#!/bin/sh chmod 0644 /etc/cron.d/python_cron chmod +x /app/kaminari_python/sh/python.sh cron && touch /etc/cron.d/python_cron

試したこと

command: bash /usr/local/bin/start_python.sh

の一文をコメントアウトしてdocker-compose upをするとうまくいきました。つまり、このcommand部分に何か問題があるのだろうと思うのですがまだ不明です。。
ちなみにstart_python.shの内容を

#!/bin/sh echo "Hello World!"

だけにしても上記のエラーメッセージの通り、すぐにコンテナが落ちます。つまり、start_python.shのファイルの内容ではなく、command: bash /usr/local/bin/start_python.shが悪さをしている。というところまでは分かるのですが、その後が分かりません。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コンテナはコンテナ起動時に実行したコマンドの終了をもって停止します。

すなわち、 command: bash /usr/local/bin/start_python.sh
と指定したことでコンテナ起動時に start_python.sh を実行しますが、
cronを バックグラウンド で実行し、実行したことを持ってコンテナが停止します。
その過程で別のプロセスを実行中であるかどうかをコンテナは関与しません。

start_python.sh の内容を echo "Hello World!" に変更した場合も同様で
"Hello World!"の出力を実行したのでコンテナが終了しています。
command: bash /usr/local/bin/start_python.shを指定しない場合は
python:3のデフォルト値であるpython3を実行しますが、
これはインタプリタを起動するので即時終了せず、コンテナも動作し続けます。

この問題はcronを フォアグラウンド で実行することで解決できます。
start_python.shの最終行を cron -f とすることで
コマンドが即時終了せず、コンテナも動作し続けます。

投稿2019/02/19 23:20

thaim

総合スコア175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Daimian

2019/02/20 10:56

早速のご回答誠にありがとうございます!完璧に狙った動作になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問