2021.02.07  

【Docker-compose】coreファイルの出力を止める方法

Docker    

事の始まり

Docker-composeでDjango、MySQL、Nginxを構成し、Amazon Linux 2にデプロイした。
httpでの接続確認もとれ、喜んでいたところDjangoプロジェクト直下のディレクトリ(manage.py が配置されているディレクトリ)にcore.[番号]ファイルが次々に作成されていることに気づく。どうやらDjangoアプリが動く度に出力されるようで、1つのファイルサイズが約50MB...!
これは無視するとまずいと思い調査を開始した。
こいつのせいで土日がまる潰れになることも知らずに...

結果

coreファイルが出力される根本原因は今だ不明だが、
coreファイルが出力されないように設定することはできた。
それには、docker-compose.yml内でulimitを定義する必要がある。
/etc/sysconfig/dockerを設定する方法もあるようだが、私の環境では効果がなかった。
参考サイト:コンテナのulimit値の設定

docker-compose.yml
  python:
      build: ./python
      command: uwsgi --socket :9999 --module project.wsgi --py-autoreload 1 --logto /tmp/mylog.log
      volumes:
        - ./src:/code
        - ./src/blog/static:/static
      expose:
        - "9999
      depends_on:
        - db
      ulimits:
       core:
        soft: 0
        hard: 0

今回対象の設定はdocker-compose.ymlの最後の方に記載しているulimits:以下の設定である。
意味的にはCentOSで/etc/security/limits.conf に設定する内容と同じ。
こちらを設定し、docker-composeを再起動すればcoreファイルの出力は止まる。

coreって何のファイル?

Linux、Unixプロセスが異常終了した際に生成されるファイル。core dumともいう。
メモリの内容を丸ごと記憶しており、サイズが大きい。

Linuxでは ulimit -c 0 コマンドを実行すれば、coreファイルの出力を止めることができるそうだが、今回は別途docker-composeに設定が必要であったため、効果はなかった。

開発環境(Mac)ではcoreファイルが生成されていなかったため、Amazon Linux 2が原因かと思っていたが、そうではなかった。Dockerは奥が深い。

コメント
現在コメントはありません。
コメントする
コメント入力

名前 (※ 必須)

メールアドレス (※ 必須 画面には表示されません)

送信