takada_yasuhiro
2022年10月14日 9時54分
お世話になっております。
Podmanのコンテナ側で標準出力にログを出力すると、ホスト側の
podman logs <コンテナ名>
でログを取得できる想定です。(/etc/atmark/containers/による自動起動であれば、この方法が通常かと思います)
しかし、自動起動または podman run -dで起動したコンテナのログは上記の方法では空でした。(バッファリングされている状態と想像してます)
コンテナを終了するとログは取得できましたが、動作中のログを取得できません。
マニュアルにはログのプラクティスが見当たりませんでしたが、動作中のログを収集する方法はあるのでしょうか。
コメント
k_uda
お世話になっています。
自己解決しました。
こちらで再現した時は下記の状況でした。(-dの代わりに -itを指定すれば、1秒間隔で時刻が表示されます。)
# NG armadillo:~# podman run -d --name=log_test_py docker.io/library/python:3.10-slim-bullseye python3 -c " > import time > from datetime import datetime > while True: > print(f'{datetime.now()}') > time.sleep(1) > " armadillo:~# sleep 5 armadillo:~# podman logs log_test_py armadillo:~# podman stop log_test_py WARN[0010] StopSignal SIGTERM failed to stop container log_test_py in 10 seconds, resorting to SIGKILL log_test_py armadillo:~# podman logs log_test_py armadillo:~#
/bin/shで同様のことを行うとpodman logsでログが出力されることから、python側の問題であると推測されます。
インターネットで同様の事象を探すと(dockerの事象として)該当するものがありました。
pythonのコマンドラインオプションで-u を指定するか、環境変数PYTHONUNBUFFERED を定義することで、ログが出力されるようになりました。
https://docs.python.org/ja/3/using/cmdline.html#cmdoption-u
お騒がせしました。
at_akihito.irie
2022年10月17日 15時55分
入江です。
> しかし、自動起動または podman run -dで起動したコンテナのログは上記の方法では空でした。(バッファリングされている状態と想像してます)
> コンテナを終了するとログは取得できましたが、動作中のログを取得できません。
こちら、当方で同様の現象が再現できませんでした。
申し訳ございませんが、最小構成で現象が再現できる手順を教えていただけま
すでしょうか。