Bagaimana untuk menatal log nginx dalam docker
penggunaan docker
1. docker ps to view running containers
2. docker images to view docker images
3. docker rm id (ID kontena) Padamkan bekas (ID kontena boleh dilihat melalui docker ps, bekas mesti dihentikan sebelum ia boleh dipadamkan)
3.1 Padam semua bekas docker rm `docker ps -a -q`
7. docker run -it ubuntu:16.04 Cipta dan jalankan bekas kontena
-t bermaksud untuk menentukan terminal atau terminal pseudo dalam yang baharu bekas
-i bermaksud benarkan kami Berinteraksi dengan (stdin) dalam bekas
-p menentukan port yang dipetakan
-d menjalankan bekas di latar belakang dan mencetak bekas id
7.1 docker run -dit ubuntu:16.04 Cipta dan jalankan bekas di latar belakang
7.2 docker run -ditp 8080:8080 (host port: container port) ubuntu:16.04 Cipta dan jalankan bekas di latar belakang dan petakan port kontena
8. id lampiran docker (id Container) Masukkan persekitaran kontena yang sedang berjalan
9. Keluar dari bekas
9.1 exit Exit bekas terus dan tamatkan bekas berjalan
9.2 [ctrl+p]+[ ctrl+q] (kekunci pintasan) Keluar dari bekas, tetapi ia tidak akan menamatkan bekas berjalan
10. docker commit -m'version idification' id (id kontena) ubuntu:16.04 (imej dan nombor versi) Serahkan imej dan Hasilkan imej (anda boleh menggunakan arahan ini untuk membungkus bekas yang dibina ke dalam imej baharu atau menulis ganti imej asal ( iaitu, ubah suai kandungan imej asal, dan nama imej yang dijana boleh terus ditulis ganti jika nama imej yang dihasilkan adalah sama dengan nombor versi))
Baiklah, semua orang tahu tentang Docker. Berikut adalah perkara utama artikel ini. nginx sendiri tidak menangani masalah guling balak, ia menendang bola kepada pengguna. Biasanya, anda boleh menggunakan alat logrotate untuk menyelesaikan tugasan ini, atau jika anda mahu, anda boleh menulis pelbagai skrip untuk menyelesaikan tugas yang sama. Pengarang artikel ini memperkenalkan cara menatal fail log nginx yang berjalan di docker (gambar di bawah adalah dari Internet).
Berfikir
nginx official sebenarnya memberi arahan tentang cara memutar log:
berputar log-filesuntuk memutar fail log, ia perlu dinamakan semula terlebih dahulu selepas itu isyarat usr1 harus dihantar ke proses induk kemudiannya akan membuka semula semua fail log yang sedang dibuka dan menetapkannya sebagai fail yang tidak mempunyai hak istimewa pengguna di mana proses pekerja sedang berjalan, sebagai pemilik selepas berjaya membuka semula, proses induk menutup semua fail yang terbuka dan menghantar mesej kepada proses pekerja untuk meminta mereka membuka semula fail baru dan menutup fail pemampatan lama serta-merta. Akibatnya, fail lama hampir serta-merta tersedia untuk pemprosesan pos, seperti Namakan semula fail log lama
•Kemudian hantar isyarat usr1 ke proses induk nginx•Proses induk nginx. akan melakukan beberapa pemprosesan selepas menerima isyarat, dan kemudian meminta proses pekerja membuka semula fail log
•Pekerja Proses membuka fail log baharu dan menutup fail log lama
Malah, satu-satunya kerja yang kita benar-benar yang perlu dilakukan ialah dua mata pertama!
Buat persekitaran ujian
Dengan mengandaikan bahawa docker telah dipasang dalam sistem anda, di sini kami menjalankan kontena nginx secara langsung:
$ docker run -d \ -p 80:80 \ -v $(pwd)/logs/nginx:/var/log/nginx \ --restart=always \ --name=mynginx \ nginx:1.11.3
Simpan kandungan berikut ke dalam fail test.sh:
#!/bin/bash for ((i=1;i<=100000;i++)) do curl http://localhost > /dev/null sleep 1 done
#!/bin/bash getdatestring() { tz='asia/chongqing' date "+%y%m%d%h%m" } datestring=$(getdatestring) mv /var/log/nginx/access.log /var/log/nginx/access.${datestring}.log mv /var/log/nginx/error.log /var/log/nginx/error.${datestring}.log kill -usr1 `cat /var/run/nginx.pid`
Tambahkan kebenaran boleh laku pada fail rotatelog.sh melalui arahan berikut dan salin ke direktori $(pwd)/logs/nginx:
$ chmod +x rotatelog.sh $ sudo cp rotatelog.sh $(pwd)/logs/nginx
Nginx kami berjalan dalam bekas, jadi kami perlu menghantar isyarat usr1 ke proses induk nginx dalam bekas. Oleh itu, kita perlu melaksanakan skrip rotatelog.sh dalam bekas mynginx melalui arahan docker exec:
Melaksanakan arahan di atas sekali akan menghasilkan sekumpulan fail log baharu sebagai dijadualkan: Seterusnya kami mengkonfigurasi arahan ini dalam tugas yang dijadualkan dan biarkan ia dilaksanakan sekali setiap pagi pada pukul 1. Jalankan arahan crontab -e dan tambah baris berikut pada penghujung fail: Simpan dan keluar. Gambar di bawah adalah kesan tatal setiap 5 minit semasa ujian pengarang: Mengapa tidak mv fail log terus dalam hos? Secara teorinya ini mungkin, kerana kandungan volum data yang dipasang melalui bind adalah sama apabila dilihat dari hos dan dari bekas. Tetapi apabila anda benar-benar melakukan ini, anda mungkin menghadapi masalah kebenaran. Dalam mesin hos, anda biasanya menggunakan pengguna biasa, dan pemilik fail log yang dijana dalam bekas akan menjadi pengguna khas, dan secara amnya pengguna lain tidak akan diberikan kebenaran menulis dan melaksanakan: Sudah tentu, jika anda menggunakan pengguna root pada mesin hos, tidak akan ada masalah. Bolehkah isyarat dihantar dari mesin hos? Malah, nama penuh soalan ini sepatutnya: Bolehkah isyarat dihantar dari hos ke proses induk nginx dalam bekas docker? Jawapannya, ya. Penulis memperkenalkan masalah penangkapan isyarat dalam bekas dalam artikel ini. Dalam artikel itu kami memperkenalkan perintah bunuh buruh pelabuhan yang menghantar isyarat kepada proses dalam bekas. Kita boleh menghantar isyarat usr1 untuk memproses No. 1 (master nginx) dalam bekas melalui arahan: (kaedah ini hanya boleh menghantar isyarat untuk memproses No. 1 ): Menggabungkan dua soalan di atas, kita boleh menulis cara lain untuk menatal log masuk docker nginx. Kaedah ini tidak memerlukan pelaksanaan perintah dalam bekas melalui arahan docker exec, tetapi melengkapkan semua operasi pada mesin hos: •Namakan semula fail log dahulu dalam volum data kontena* 1 * * * docker exec mynginx bash /var/log/nginx/rotatelog.sh
$ docker container kill mynginx -s usr
• Hantar isyarat usr1 untuk memproses No 1 dalam bekas
Atas ialah kandungan terperinci Bagaimana untuk menatal log nginx dalam docker. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Bagaimana cara menggunakan desktop Docker? Docktop Docktop adalah alat untuk menjalankan bekas Docker pada mesin tempatan. Langkah -langkah untuk digunakan termasuk: 1. Pasang desktop Docker; 2. Mulakan desktop Docker; 3. Buat imej Docker (menggunakan Dockerfile); 4. Membina imej Docker (menggunakan Docker Build); 5. Jalankan bekas Docker (menggunakan Docker Run).

Untuk mendapatkan versi Docker, anda boleh melakukan langkah -langkah berikut: Jalankan arahan Docker "Docker -version" untuk melihat versi klien dan pelayan. Untuk MAC atau Windows, anda juga boleh melihat maklumat versi melalui tab versi Docktop GUI atau menu desktop Docker.

Anda boleh beralih ke sumber cermin domestik. Langkah -langkah adalah seperti berikut: 1. Edit fail konfigurasi /etc/docker/daemon.json dan tambahkan alamat sumber cermin; 2. Selepas menyimpan dan keluar, mulakan semula perkhidmatan Docker Sudo SystemCtl Docker untuk meningkatkan kelajuan muat turun dan kestabilan imej.

Langkah -langkah untuk membuat imej Docker: Tulis Dockerfile yang mengandungi arahan membina. Bina imej di terminal, menggunakan arahan membina Docker. Tag imej dan tetapkan nama dan tag menggunakan arahan tag docker.

Langkah -langkah untuk mengemas kini imej Docker adalah seperti berikut: Tarik tag imej terkini imej baru memadam imej lama untuk tag tertentu (pilihan) mulakan semula bekas (jika diperlukan)

Kaedah untuk melihat log Docker termasuk: Menggunakan arahan Log Docker, contohnya: Log Docker Container_Name Gunakan arahan docker exec untuk menjalankan /bin /sh dan lihat fail log, contohnya: docker exec -it container_name /bin /sh; Cat /var/log/container_name.log Gunakan arahan log docker-compose compose, contohnya: docker-compose -f docker-com

Untuk menyimpan imej di Docker, anda boleh menggunakan arahan Docker Commit untuk membuat imej baru, yang mengandungi keadaan semasa bekas yang ditentukan, Sintaks: Docker Commit [Options] Nama Imej Container ID. Untuk menyimpan imej ke repositori, anda boleh menggunakan arahan PUSH Docker, Sintaks: Docker Push Nama Imej [: TAG]. Untuk mengimport imej yang disimpan, anda boleh menggunakan arahan tarik docker, sintaks: docker tarik nama imej [: tag].

Anda boleh menanyakan nama kontena Docker dengan mengikuti langkah -langkah: Senaraikan semua bekas (Docker PS). Tapis senarai kontena (menggunakan arahan grep). Mendapat nama kontena (terletak di lajur "Nama").
