2つのサービスを持つDockerコンテナを起動しようとしています。サービスの1つは、rootではなくユーザーとして実行する必要があります。それ以外の場合、サービスは開始されません。もう一方はrootとして実行する必要があります。
これで、dockerがログをキャプチャできるようにファイルをリンクしたいと思います(次を使用してnon_root_service.log
確認します)。/dev/tty
/dev/stdout
docker 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
?