Dockerコンテナを作成した簡単なコードがあり、ステータスはそれが正常に実行されていることを示しています。コード内では、いくつかのprint()
コマンドを使用してデータを印刷しました。印刷コマンドの出力を見たいと思いました。
このために、私はdockerログを見ました。ただし、ログが表示されないため、機能していないようです。ログを確認する方法は?
$ Sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a3b3fd261b94 myfirstdocker "python3 ./my_script…" 22 minutes ago Up 22 minutes elegant_darwin
$ Sudo docker logs a3b3fd261b94
<shows nothing>
ログをstdout
に出力する必要がある最初のポイント。
Dockerログを確認するには、次のコマンドを使用します。
docker logs --help
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
Options:
--details Show extra details provided to logs
-f, --follow Follow log output
--help Print usage
--since string Show logs since timestamp
--tail string Number of lines to show from the end of the logs (default "all")
-t, --timestamps Show timestamps
いくつかの例:
docker logs --since=1h <container_id>
想定される出力がそれほど多くない場合(たとえば、スクリプトが数バイトだけを印刷しようとする場合)、pythonがバッファリングしていると思われます。
出力にさらにデータを追加して、バッファーがフラッシュされることを確認し、PYTHONUNBUFFERED = 1を使用してみてください(ただし、この設定に関係なく、python3はまだバッファリングを行う場合があります)。