前提・実現したいこと
Dockerのnginx/nginxイメージからなるnginxコンテナのアクセス・エラーログをデフォルトのパス(/var/log/nginx/access.logと/var/log/nginx/error.log)でボリュームに格納し、永続化をしたいができません。またそれをCatコマンドで確認したいです。
その際、以下のような問題が発生しました。
発生している問題
Nginxデフォルトのアクセス・エラーログのファイルである、/var/log/nginx配下のaccess.logとerror.logをcatコマンドで表示をしようとしたところ、何も表示されず、終了もしませんでした。
該当のソースコード
/etc/nginx/conf.d/ssl.conf
server { listen 443 ssl; listen [::]:443 ssl; server_name www.example.com; ssl_certificate /example/pass/fullchain.pem; ssl_certificate_key /example/pass/privkey.pem; access_log /var/log/nginx/access.log main; location / { root /usr/share/nginx/html; index index.html; } }
そのリンクをたどっていくと...
docker-compose.yml
version: '3.8' services: www: container_name: www-container hostname: www-container image: nginx restart: always ports: - 80:80 - 443:443 environment: TZ: Asia/Tokyo volumes: - www-conf.d:/etc/nginx/conf.d - www-log:/var/log/nginx volumes: www-conf.d: external: true www-log: external: true
試したこと
まずログファイルの権限は一時的に777にしました。
そして新しくテスト用のRockyLinuxコンテナを用意し、yumでNginxをインストールし、ログファイルの権限等を見比べたところ、yumでインストールしたnginxのログファイルは以下の通り通常のファイルでした。
total 4 -rw-r--r-- 1 root root 91 Dec 20 17:26 access.log -rw-r--r-- 1 root root 0 Dec 20 17:21 error.log
しかしNginx/Nginxイメージで起動した場合のログファイルは以下のようにシンボリックリンクで別の場所を参照していました。
total 0 lrwxrwxrwx 1 root root 11 Nov 17 10:38 access.log -> /dev/stdout lrwxrwxrwx 1 root root 11 Nov 17 10:38 error.log -> /dev/stderr
そのシンボリックリンクを見るとどうやらシンボリックリンクの数珠繋ぎのようになっているようで、最終的に以下のようになりました。
crw--w---- 1 souhei tty 136, 2 Dec 21 02:58 /dev/pts/2
そのためyumでインストールしたファイルの形式とは違うのかと考え、いったん、既存のaccess.logとerror.logを削除したのち、touchコマンドで各ファイルを作り直しましたが、結果は変わりませんでした。
しかし、docker logsコマンドでログを確認したところ、アクセスログは問題なく出力されていました。
補足情報(FW/ツールのバージョンなど)
Docker: 20.10.11
Nginx: 1.21.4
また当方、独学で実務経験もないため、正確な言い回しや単語を言えていないと考えられるため、その旨のご指摘等ございましたら、言っていただけるようお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。