[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
답변
답변
다음은 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;'