2014-06-16 3 views
23

저는 웹 서버를 도킹하는 데 대한 자습서 및 설명서를 시도했지만 docker 실행 명령을 통해 서비스를 실행하는 데 문제가 있습니다. Dockerized nginx가 시작되지 않습니다

FROM ubuntu:trusty 

#Update and install stuff 
RUN apt-get update 
RUN apt-get install -y python-software-properties aptitude screen htop nano nmap nginx 

#Add files 
ADD src/main/resources/ /usr/share/nginx/html 

EXPOSE 80 
CMD service nginx start 

내가 내 이미지 생성 :

내 Dockerfile입니다

docker build -t myImage . 

을 그리고 나는 그것을 실행하면 그냥 중지하는 것

docker run -p 81:80 myImage 

:

docker ps -a 

CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES 
90e54a254efa  pms-gui:latest  /bin/sh -c service n 3 seconds ago  Exit 0         prickly_bohr 

포트 81-> 80으로 실행되고있을 것으로 예상되지만 그렇지 않습니다. 달리기

docker start 90e 

아무 것도 보이지 않습니다.

내가 직접

docker run -t -i -p 81:80 myImage /bin/bash 

여기에서 나는 서비스

service nginx start 

를 시작하고 다른 탭에서 나는 (또한 브라우저에서) 의도 한대로 작동하고 볼 수 있습니다 그것을 입력 시도 :

CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES 
408237a5e10b  myImage:latest  /bin/bash   12 seconds ago  Up 11 seconds  0.0.0.0:81->80/tcp mad_turing 

그래서 나는 Dockerfile에 문제가 있다고 생각합니까? 누구든지이 문제로 나를 도울 수 있었는지, 나는 Docker에게 새로운 것을 알게되었습니다. 고맙습니다!

해결 방법 : Ivant의 답변에 따라 전경에서 nginx를 시작하는 다른 방법을 발견했습니다.

CMD /usr/sbin/nginx -g "daemon off;" 

답변

17

도커 컨테이너가 같은 당신이 실행 CMD, ENTRTYPOINT 또는 명령 줄을 통해 지정 명령으로 실행 :처럼 내 Dockerfile CMD는 이제 보인다. 귀하의 경우 service 명령이 즉시 완료되고 전체 컨테이너가 종료됩니다.

이 문제를 해결하는 한 가지 방법은 명령 줄에서 직접 nginx를 시작하는 것입니다 (데몬으로 실행하지 마십시오).

또 다른 옵션은 서비스를 시작한 후 영원히 잠잘 수있는 작은 스크립트를 만드는 것입니다. 같은 뭔가 :

#!/bin/bash 
service nginx start 
while true; do sleep 1d; done 

와 직접 service 명령을 실행하는 대신이 작업을 실행합니다.

세 번째 옵션은 정상적인 서비스 대신 runit 또는 이와 유사한 프로그램을 사용하는 것입니다.

+0

감사합니다. 설명 할 때 매우 분명합니다. 저는 이제 루프 스크립트를 작성했으며 아마도이 솔루션을 제 시간에 전개 할 것입니다. 이제 나는 왜 그런지 알았어! – Solvemon

+0

첫 줄은 문서의 일부일 것입니다. – Vor

4

Docker는 공식 및 사용자 이미지의 매우 훌륭한 지표입니다. 뭔가를하고 싶다면 누군가 이미 이미 그랬다;)

index.docker에서 'nginx'를 검색하면됩니다.io, 당신은 볼 것이다, 공식 nginx 이미지가있다 : https://registry.hub.docker.com/_/nginx/

거기에 당신의 웹 서버를 시작하는 데 도움 전체 가이드.

변종 :

아이디어는 포 그라운드 모드에서 nginx를 시작하는 것입니다 볼 수 nginx를 이미지 다른 사용자를 살펴 주시기 바랍니다.

+0

핵심 부분은 https://github.com/nginxinc/docker-nginx/blob/master/stable/stretch/Dockerfile의 CMD 명령입니다.'CMD [ "nginx", "-g", "daemon off;" ]' – bonh

41

는 현재로서는 공식의 nginx 이미지 (the Dockerfile 참조) nginx를 실행하려면이 옵션을 사용하여 내 경우

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

, 이것은 제대로 시작 얻기에 충분했다. 튜토리얼을 온라인으로 작성하는 것이 더 어색한 방법이지만이 방법은 매우 깨끗합니다.

+3

이것은 올바른 방법입니다. – wieczorek1990

5

고정 표시기-작성을 사용하여 :

권장 해결 방법을 수행하기 위해, 고정 표시기 - compose.yml에 추가 :

daemon off; 
:

command: nginx -g "daemon off" 

나는 또한 단순히 nginx.conf에 추가 할 수 발견

... docker-compose.yml에서 계속 사용하십시오.

command: service nginx start 

... 설정 파일을 도커 외부에서 덜 휴대 할 수는 있지만.

관련 문제