2017-10-13 32 views
6

मैं अल्पाइन और अपाचे के साथ एक डॉकर छवि बनाना चाहता हूं। मैं टिनि को "इनिट" -सिस्टम के रूप में उपयोग करता हूं। यह तब तक काम करता है जब तक मैं कंटेनर को अलग नहीं करता और फिर से जोड़ता हूं। कंटेनर अपाचे से बाहर निकलने के बाद और कंटेनर बंद हो जाता है। मुझे नहीं पता कि समस्या क्या है। क्या किसी को डॉकर, अल्पाइन और अपाचे के साथ समान समस्याएं थीं?डॉकर अल्पाइन लिनक्स के साथ अपाचे

मेरे Dockerfile इस CLI डोकर को

FROM alpine 
ENV TINI_VERSION v0.16.1 
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini-static /sbin/tini 
RUN chmod +x /sbin/tini 
RUN apk add --no-cache apache2 \ 
    && mkdir -p /run/apache2 \ 
    && ln -sf /dev/stdout /var/log/apache2/access.log \ 
    && ln -sf /dev/stderr /var/log/apache2/error.log 
EXPOSE 80 
ENTRYPOINT ["/sbin/tini", "-vvv", "-g", "--"] 
CMD ["/usr/sbin/httpd", "-f", "/etc/apache2/httpd.conf", "-DFOREGROUND"] 

इनपुट और आउटपुट (से पहले, मैं tini के लिए Alpines पैकेज प्रबंधक प्रयोग किया जाता) की तरह दिखता है:

~/Desktop/[email protected] 
$ docker run -itd test1 
a793bad5d4350f58893909f1552c9f2978d8e2952960ac667f8dcb2bf7a3516e 

~/Desktop/[email protected] 
$ docker container ls 
CONTAINER ID  IMAGE    COMMAND     CREATED    
STATUS    PORTS    NAMES 
a793bad5d435  test1    "/sbin/tini -vvv -..." 12 seconds 
ago  Up 11 seconds  80/tcp    sharp_neumann 

~/Desktop/[email protected] 
$ docker attach a7 
[DEBUG tini (1)] Received SIGCHLD 
[DEBUG tini (1)] Reaped child with pid: '5' 
[INFO tini (1)] Main child exited normally (with status '0') 
[TRACE tini (1)] No child to wait 
[TRACE tini (1)] Exiting: child has exited 

अद्यतन: समस्या apache2 प्रतीत होती है, जो सिग्विन (विंडो आकार परिवर्तन) प्राप्त करता है जबकि डॉकर को conta से जोड़ता है iner:

[Sun Oct 15 12:13:24.592575 2017] [mpm_prefork:notice] [pid 5] AH00170: caught SIGWINCH, shutting down gracefully 
[DEBUG tini (1)] Received SIGCHLD 
[DEBUG tini (1)] Reaped child with pid: '5' 
[INFO tini (1)] Main child exited normally (with status '0') 
[TRACE tini (1)] No child to wait 
[TRACE tini (1)] Exiting: child has exited 

अपाचे apachectl उपयोगिता के साथ संयोजन के रूप में संकेत दुरुपयोग शान से सर्वर बंद करने के लिए। क्या इस सिग्नल को अवरुद्ध करना संभव है ताकि इसे अपाचे तक नहीं दिया जा सके?

उत्तर

2

यह सच है कि अपाचे एक सुंदर बंद को गति प्रदान करने SIGWINCH उपयोग करता है:

docker kill ----signal=SIGWINCH apache 

docker-library/httpd issue 9 उल्लेख

यहां तक ​​कि बस छोड़ने "-t" SIGWINCH भेजने जब खिड़की का आकार बदलता निकाल देना चाहिए।

दरअसल, आपको केवल -d की आवश्यकता है: PR669 देखें।
अपने मामले में, आप पहले से ही -dit के साथ छवि चला रहे हैं, इसलिए जांच करें कि -d को रखने में मदद मिल सकती है या नहीं।

मूल समस्या (httpd पक्ष पर, डॉकर पर) bug id 1212224 में वर्णित है।

OP Sebi2020in the comments पुष्टि करता है:

अगर मैं एक tty कनेक्ट न करें संकेत,

तो यदि संभव हो तो नहीं भेजा है -t से बचने और, यदि आवश्यक हो तो, एक docker exec -t session जोड़ने अगर आपको टीटी की जरूरत है।

+0

मैं एक समाधान के लिए खोज कर रहा हूँ जो रास्ता को सीमित नहीं करता आप जैसे डोकर कंटेनर चलाने '-t' या नहीं के साथ। – Sebi2020

+0

@ सेबी 2020 ठीक है, लेकिन पहले, बस आपके मामले में काम करेगा? – VonC

+0

हां, अगर मैं एक टीटीई कनेक्ट नहीं करता तो सिग्नल नहीं भेजा जाता है। – Sebi2020

1

आप कर सकते थे shell form जो /bin/sh -c <...> की ओर जाता है exec form से अपने CMD अनुदेश स्विचन जब कंटेनर चलाया जाता है इस्तेमाल किया जा रहा प्रयास करें:

CMD /usr/sbin/httpd -f /etc/apache2/httpd.conf -DFOREGROUND 
# or use ENTRYPOINT with the same shell form 

यह तो नहीं रह गया पीआईडी ​​1 है और यूनिक्स संकेतों subprocesses करने के लिए नीचे पारित नहीं कर रहे हैं ।

लेकिन मुझे यकीन नहीं है (आपके वर्कफ़्लो के आधार पर) यदि आप attach या exec -it या stop कंटेनर के रूप में कर सकते हैं।

संदर्भ:
http://www.johnzaccone.io/entrypoint-vs-cmd-back-to-basics/
(फैक्ट 3)
https://docs.docker.com/engine/reference/builder/#cmd https://docs.docker.com/engine/reference/builder/#shell-form-entrypoint-example

+0

पर एक संभावित वर्कअराउंड (परीक्षण करने के लिए) को शामिल करने के लिए उत्तर संपादित किया है, लेकिन यह टिनी को छोड़ देता है, जो ज़ोंबी प्रक्रियाओं को पुनः प्राप्त करता है। – Sebi2020

संबंधित मुद्दे