ulimitコマンドを使用して、コアファイルのサイズを設定します。
ulimit -c unlimited
そして、gcc --gオプションを使用してcソースコードをコンパイルしました。次にa.outが生成されます。コマンド後
./a.out
実行時エラーがあります。
(core dumped)
コアファイルは生成されませんでした(例:core.294340)
コアファイルを生成する方法は?
まず、コンテナがコンテナファイルシステムの既存の場所にコアを書き込むことを確認します。コア生成設定は、コンテナーではなくホストで設定されます。例:
echo '/cores/core.%e.%p' | Sudo tee /proc/sys/kernel/core_pattern
/ coresフォルダーにコアを生成します。
Dockerfileで、そのフォルダーを作成します。
RUN mkdir /cores
コアサイズの制限を指定する必要があります。 ulimitシェルコマンドは機能しません。これは、現在のシェルでのみ影響するためです。 docker runオプション--ulimitを、ソフト制限とハード制限とともに使用する必要があります。 Dockerイメージをビルドしたら、次のようにコンテナを実行します。
docker run --ulimit core=-1 --mount source=coredumps_volume,target=/cores ab3ca583c907 ./a.out
ここで、coredumps_volumeは、コンテナーが終了した後もコアが存続する、すでに作成したボリュームです。例えば。
docker volume create coredumps_volume
既存のプロセスのコアダンプを生成する場合、たとえばgcore
を使用する場合は、--cap-add=SYS_PTRACE
でコンテナーを起動して、コンテナー内でrootとして実行されているデバッガーがプロセスにアタッチできるようにする必要があります。 (信号のコアダンプについては、他の回答を参照してください)