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

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

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

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

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



답변

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

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


답변

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

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

nginx -g 'daemon off;'

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

nginx


답변

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

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


답변

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

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


답변

참고로 오늘 (2019 년 10 월 22 일) 공식 Nginx 도커 이미지는 모두 다음과 같습니다.

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

예 : https://github.com/nginxinc/docker-nginx/blob/23a990403d6dbe102bf2c72ab2f6a239e940e3c3/mainline/alpine/Dockerfile#L117


답변

다음은 nginx를 실행하는 Dockerfile의 예입니다. Charles가 언급했듯이 daemon off구성을 사용합니다 .

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


답변

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

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

ENTRYPOINT nginx -g 'daemon off;'

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

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