중지하지 않고 Docker 컨테이너 내에서 Nginx를 실행하는 방법은 무엇입니까?


130

Docker 컨테이너에 Nginx가 설치되어 있으며 다음과 같이 실행하려고합니다.

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

문제는 Nginx의 작동 방식에 따라 초기 프로세스가 즉시 마스터 Nginx 프로세스와 일부 작업자를 생성 한 다음 종료된다는 것입니다. Docker는 원래 명령의 PID 만보 고 있기 때문에 컨테이너가 중지됩니다.

용기가 멈추지 않게하려면 어떻게합니까? 첫 번째 자식 프로세스에 바인딩하거나 Nginx의 초기 프로세스가 종료되지 않도록 할 수 있어야합니다.

답변:


165

nginx잘 작동하는 모든 프로그램과 마찬가지로 자체 데모하지 않도록 구성 할 수 있습니다.

http://wiki.nginx.org/CoreModule에daemon off 설명 된 구성 지시문을 사용 하십시오 .


15
감사! 분명히 말하면, /etc/nginx/nginx.conf를 편집하고 "데몬 오프"를 추가하는 것을 의미합니다. 맨 위에 (즉, 서버 나 다른 지시문이 아닌)
Seldo

6
나는 그것이 daemon offnginx에 의해 보증되지 않는 것에 대해 다소 걱정하고 있습니다.
Leonid Shevtsov

7
@LeonidShevtsov ... 1.0.9 이전의 프로덕션 사용을 보증 하지 않았다는 의미 입니다. 전체 업그레이드에 대한 선입견은 도커 웨이를하는 사람들에게는 중요하지 않습니다.
Charles Duffy

그들은 이제 서버 측 ( nginx.org/en/docs/ngx_core_module.html ) 으로 리디렉션하는 것처럼 보입니다 .
찰스 더피

175

Charles Duffy의 답변을 확장하기 위해 Nginx는 daemon off지시문을 사용 하여 포 그라운드에서 실행합니다. 이것을 구성 파일에 넣기가 불편한 경우 명령 행에서 직접 지정할 수 있습니다. 이를 통해 디버그 모드 (전경)에서 쉽게 실행하고 명령 줄 인수를 변경하여 프로덕션 모드 (백그라운드)에서 직접 실행으로 전환 할 수 있습니다.

포 그라운드에서 실행하려면 다음을 수행하십시오.

nginx -g 'daemon off;'

백그라운드에서 실행하려면

nginx

3
누군가 "-g"가 실제로 무엇인지 설명 할 수 있습니까? 문서 에서이 스위치를 찾을 수 없으며이 예제를 사용하는 nginx의 예제 만 있습니다.
red888

5
@ red888, 전역 구성 옵션을 설정합니다.
찰스 더피

1
CMD될 것입니다 CMD ["nginx", "-g", "daemon off;"] 고정 표시기를위한
prayagupd

55

John의 답변을 확장하려면 Dockerfile CMD다음과 같은 명령을 사용할 수도 있습니다 (추가 인수없이 자체 시작하려는 경우)

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

10

Dockerfile에이 명령을 추가하면 비활성화 할 수 있습니다.

RUN echo "daemon off;" >> /etc/nginx/nginx.conf



6

Tomer와 Charles의 답변을 추가하려면

진입 점을 사용하여 Docker 컨테이너의 forground에서 nginx를 실행하는 구문 :

ENTRYPOINT nginx -g 'daemon off;' 

직접 관련이 없지만 진입 점으로 여러 명령을 실행하려면 다음을 수행하십시오.

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


0

도커 컨테이너에서 nginx 이미지를 실행하려고하는 모든 사람들에게 서비스로 실행됩니다.

전체 Dockerfile이 없으므로 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.