Saya sudah menginstal Nginx di wadah Docker, dan saya mencoba menjalankannya seperti ini:
docker run -i -t -p 80:80 mydockerimage /usr/sbin/nginx
Masalahnya adalah cara kerja Nginx, adalah bahwa proses awal segera memunculkan proses master Nginx dan beberapa pekerja, dan kemudian berhenti. Karena Docker hanya menonton PID dari perintah aslinya, wadah kemudian berhenti.
Bagaimana saya mencegah wadah berhenti? Saya harus bisa mengatakannya untuk mengikat ke proses anak pertama, atau menghentikan proses awal Nginx dari keluar.
daemon off
tidak didukung oleh nginx .Untuk memperluas jawaban Charles Duffy, Nginx menggunakan
daemon off
arahan untuk menjalankan di latar depan. Jika tidak nyaman untuk meletakkan ini di file konfigurasi, kita dapat menentukannya langsung pada baris perintah. Ini membuatnya mudah dijalankan dalam mode debug (foreground) dan langsung beralih ke running dalam mode produksi (latar belakang) dengan mengubah argumen baris perintah.Untuk berjalan di latar depan:
Untuk berjalan di latar belakang:
sumber
CMD
akan menjadiCMD ["nginx", "-g", "daemon off;"]
buruh pelabuhanUntuk memperluas jawaban John, Anda juga dapat menggunakan
Dockerfile
CMD
perintah sebagai berikut (jika Anda ingin memulai sendiri tanpa argumen tambahan)sumber
Menambahkan perintah ini ke Dockerfile dapat menonaktifkannya:
sumber
Hanya FYI, pada hari ini (22 Oktober 2019) gambar Nginx docker resmi semuanya memiliki garis:
misal https://github.com/nginxinc/docker-nginx/blob/23a990403d6dbe102bf2c72ab2f6a239e940e3c3/mainline/alpine/Dockerfile#L117
sumber
Di sini Anda memiliki contoh Dockerfile yang menjalankan nginx. Seperti disebutkan oleh Charles, itu menggunakan
daemon off
konfigurasi:https://github.com/darron/docker-nginx-php5/blob/master/Dockerfile#L17
sumber
Untuk menambahkan jawaban Tomer dan Charles,
Sintaks untuk menjalankan nginx di forground dalam wadah Docker menggunakan Entrypoint:
Tidak terkait langsung tetapi untuk menjalankan beberapa perintah dengan Entrypoint:
sumber
Sebaiknya gunakan supervisord atau runit [1] untuk manajemen layanan.
[1] https://github.com/phusion/baseimage-docker
sumber
Karena tidak ada Dockerfile secara keseluruhan, inilah seluruh
Dockerfile
pemecahan masalah saya.Bagus dan bekerja Terima kasih atas semua jawaban di sini untuk menyelesaikan masalah nginx terakhir.
Dan jalankan dengan:
sumber