बिना डॉकिंग कंटेनर के भीतर नग्नेक्स को कैसे रोका जाए?


130

मेरे पास Nginx एक Docker कंटेनर पर स्थापित है, और मैं इसे इस तरह चलाने की कोशिश कर रहा हूं:

docker run -i -t -p 80:80 mydockerimage /usr/sbin/nginx

समस्या यह है कि जिस तरह से नगनेक्स काम करता है, वह यह है कि प्रारंभिक प्रक्रिया तुरंत एक मास्टर नग्नेक्स प्रक्रिया और कुछ श्रमिकों को जन्म देती है, और फिर क्विट करती है। चूंकि डॉकटर केवल मूल कमांड के पीआईडी ​​को देख रहा है, कंटेनर तब रुकता है।

मैं कंटेनर को रोकने से कैसे रोकूं? मुझे यह बताने में सक्षम होना चाहिए कि यह पहली बच्चे की प्रक्रिया से बंधे, या नग्नेक्स की प्रारंभिक प्रक्रिया को बाहर निकलने से रोकें।

जवाबों:


165

nginx, सभी अच्छी तरह से व्यवहार किए गए कार्यक्रमों की तरह, स्व-डीमॉनेटाइज़ करने के लिए कॉन्फ़िगर नहीं किया जा सकता है।

Http://wiki.nginx.org/CoreModuledaemon off में वर्णित कॉन्फ़िगरेशन निर्देश का उपयोग करें ।


15
धन्यवाद! स्पष्ट करने के लिए, इसका मतलब है कि संपादन /etc/nginx/nginx.conf और "डेमॉन ऑफ़" जोड़ना; शीर्ष पर (यानी एक सर्वर या अन्य निर्देश के अंदर नहीं)
सेलडो


7
@LeonidShevtsov ... आपका मतलब है कि 1.0.9 से पहले उत्पादन के उपयोग के लिए समर्थन नहीं किया गया था । इन-प्लेस अपग्रेड के बारे में, खड़े रहने वाले लोगों को, डॉकटर वे बातें करने वाले लोगों के लिए कोई फर्क नहीं पड़ता।
चार्ल्स डफी

उन्हें अब सर्वर-साइड में ( nginx.org/en/docs/ngx_core_module.html पर ) एक पुनर्निर्देशन लगता है ।
चार्ल्स डफी

175

चार्ल्स डफी के जवाब पर विस्तार करने के लिए, नेग्नेक्स daemon offअग्रभूमि में चलाने के निर्देश का उपयोग करता है। यदि इसे कॉन्फ़िगरेशन फ़ाइल में रखना असुविधाजनक है, तो हम इसे सीधे कमांड लाइन पर निर्दिष्ट कर सकते हैं। यह डिबग मोड (अग्रभूमि) में चलाना आसान बनाता है और कमांड लाइन आर्ग को बदलकर उत्पादन मोड (पृष्ठभूमि) में चलने के लिए सीधे स्विच करता है।

अग्रभूमि में चलाने के लिए:

nginx -g 'daemon off;'

पृष्ठभूमि में चलाने के लिए:

nginx

3
क्या कोई समझा सकता है कि वास्तव में "-जी" क्या है? मुझे यह स्विच डॉक्स में केवल एक उदाहरण नहीं मिल रहा है, इसके साथ nginx का उपयोग कर रहा है।
red888

5
@ red888, एक वैश्विक कॉन्फ़िगरेशन विकल्प सेट करता है।
चार्ल्स डफी

1
CMDCMD ["nginx", "-g", "daemon off;"]
डॉकटर के

55

जॉन के उत्तर पर विस्तार करने के लिए आप Dockerfile CMDकमांड का उपयोग निम्न के रूप में भी कर सकते हैं (यदि आप इसे अतिरिक्त आर्गन्स के बिना स्वयं शुरू करना चाहते हैं)

CMD ["nginx", "-g", "daemon off;"]



6

यहाँ आपके पास एक डॉकरीफाइल का उदाहरण है जो नगनेक्स चलाता है। जैसा कि चार्ल्स ने उल्लेख किया है, यह daemon offविन्यास का उपयोग करता है:

https://github.com/darron/docker-nginx-php5/blob/master/Dockerfile#L17


2
और ऑफिशियल नेग्नेक्स डोकरफाइल पर: github.com/dockerfile/nginx/blob/master/Dockerfile#L15
Ciro Santilli 郝海东 gin 病 gin

6

तोमर और चार्ल्स उत्तर जोड़ने के लिए,

एंट्रीपॉइंट का उपयोग करके डॉकटर कंटेनर में ग्राउंड में नेगनेक्स चलाने के लिए सिंटैक्स:

ENTRYPOINT nginx -g 'daemon off;' 

सीधे संबंधित नहीं है लेकिन एंट्रीपॉइंट के साथ कई कमांड चलाने के लिए:

ENTRYPOINT /bin/bash -x /myscripts/myscript.sh && nginx -g 'daemon off;' 


0

उन सभी के लिए जो डॉकटर कंटेनर में एक नगनेक्स छवि को चलाने की कोशिश कर रहे हैं, जो एक सेवा के रूप में चलेगा

जैसा कि पूरा डॉकरीफाइल नहीं है, यहां मेरा पूरा Dockerfileमामला सुलझ रहा है।

अच्छा और काम कर रहा है। अंतिम nginx समस्या को हल करने के लिए यहां सभी उत्तरों के लिए धन्यवाद।

FROM ubuntu:18.04
MAINTAINER stackoverfloguy "stackoverfloguy@foo.com"
RUN apt-get update -y
RUN apt-get install net-tools nginx ufw sudo -y
RUN adduser --disabled-password --gecos '' docker
RUN adduser docker sudo
RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
USER docker
RUN sudo ufw default allow incoming
RUN sudo rm /etc/nginx/nginx.conf
RUN sudo rm /etc/nginx/sites-available/default
RUN sudo rm /var/www/html/index.nginx-debian.html
VOLUME /var/log
VOLUME /usr/share/nginx/html
VOLUME /etc/nginx
VOLUME /var/run
COPY conf/nginx.conf /etc/nginx/nginx.conf
COPY content/* /var/www/html/
COPY Dockerfile /var/www/html
COPY start.sh /etc/nginx/start.sh
RUN sudo chmod +x /etc/nginx/start.sh
RUN sudo chmod -R 777 /var/www/html
EXPOSE 80
EXPOSE 443
ENTRYPOINT sudo nginx -c /etc/nginx/nginx.conf -g 'daemon off;'

और इसे चलाएं:

docker run -p 80:80 -p 443:443 -dit
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.