Docker:root以外のユーザーとしてログファイルを/ dev / stdoutに送信します。

Docker:root以外のユーザーとしてログファイルを/ dev / stdoutに送信します。

2つのサービスを持つDockerコンテナを起動しようとしています。サービスの1つは、rootではなくユーザーとして実行する必要があります。それ以外の場合、サービスは開始されません。もう一方はrootとして実行する必要があります。

これで、dockerがログをキャプチャできるようにファイルをリンクしたいと思います(次を使用してnon_root_service.log確認します)。/dev/tty/dev/stdoutdocker logs $CONTAINER

ln -s /dev/stdout non_root_service.log

問題は、この操作を実行すると、root以外のユーザーに書き込み権限がない場合、またはroot/dev/tty以外/dev/stdoutのサービスが開始されたときに次のエラーが発生することです。

cannot open "non_root_service.log": Permission denied

ただし、リンクを作成しないとログをキャプチャできませんdocker logs $CONTAINER。 root以外のユーザーとして実行してログファイルをリンクできるように、この問題を解決する方法を知っている人はいますか/dev/{tty,stdout}

PS:シェルスクリプトを使用しても、スーパーバイザを使用してCMD ["starter.sh"]両方のCMD ["supervisord", "-n", "-c", "/app/supervisord.conf"]サービスを起動しても、同じエラーが発生します。

答え1

最もクリーンなソリューションではないかもしれませんが、次のことを試すことができます。

tail -f non_root_service.log &

単にファイルをstdoutにテーリングし、テイリングプロセスをバックグラウンドにしますか? pをstdoutで直接追跡することもできます。

ln -s ln -fs /proc/self/fd/1 non_root_service.log

しかし、non_root_service.logファイルへのアクセス権はありますか?走るとstat non_root_service.log何が見えますかwhoami

関連情報