2016-06-09 3 views
1

나는 비교적 새로운 uWSGI를 사용하여 파이썬 응용 프로그램을 제공하고 있는데 vassal을 사용하여 황제 모드에서 uWSGI 프로세스를 시작하려고 시도하지만 다음 명령을 사용하여 Docker 내부에서 uWSGI를 시작하려고 할 때마다 (root) :Docker에서 uWSGI가 시작되지 않는 이유는 무엇입니까?

내가 응답으로 무엇을 얻을
# /usr/local/bin/uwsgi --ini /etc/uwsgi/emperor.ini 

은 다음과 같습니다

# files/etc/uwsgi/emperor.ini 
[uwsgi] 
emperor = /etc/uwsgi/apps-enabled 
die-on-term = true 
log-date = true 
:

[uWSGI] getting INI configuration from /etc/uwsgi/emperor.ini 
2.0.13.1 

emperor.ini 구성 파일과 같은 691,363,210

유일하게 좋아하는 하인의 구성은 보이지만 :

는 NB
# files/etc/uwsgi/apps-enabled/application.ini 
[uwsgi] 
app_dir = /var/www/server 
plugin = python 
master = true 
callable = app 
chdir = %(app_dir) 
mount = /=%(app_dir)/start.py 
protocol = uwsgi 
socket = :8079 
uid = www-data 
gid = www-data 

buffer-size = 32768 
enable-threads = true 
single-interpreter = true 
processes = 1 

stats = 127.0.0.1:1717 

(: 다음 올바른 위치에 복사합니다 위에서 그들이 Dockerfile를 기준으로 사는 곳의 측면에서 주어진 파일 이름, 기본적으로 제거 접두사 files) 현재

나는 uWSGI 프로세스를 시작하려고 시도하고 있지만 내가) ubuntu:latestalpine:latest을 시도하고 같은 문제가 발생했습니다 불구하고 (AN ubuntu:trusty 기본 이미지의 떨어져 내장되어 사용하고있어 uWSGI 도커 이미지 이전의 명시된 바와 같이 관리자와 y, 명령 행에서 직접 실행할 때도 실패합니다. Docker 이미지에서 나는 pip을 사용하여 uWSGI를 설치하고 있지만 apt-get과 같은 결과를 보았습니다.

또 다른 버전의 uWSGI 2.0.13.1 및 1.9와 동일한 결과를 시도했음을 언급해야합니다. 언급 한 바와 같이

# Dockerfile 
FROM ubuntu:trusty 
MAINTAINER Sean Quinn "[email protected]" 

RUN apt-get update \ 
&& apt-get install -y \ 
     ack-grep git nano \ 
     supervisor \ 
     build-essential gcc python python-dev python-pip 

RUN sed -i 's/^\(\[supervisord\]\)$/\1\nnodaemon=true/' /etc/supervisor/supervisord.conf \ 
&& sed -i 's/^\(\[supervisord\]\)$/\1\nloglevel=debug/' /etc/supervisor/supervisord.conf \ 
&& sed -i 's/^\(files = .*\)$/;\1/' /etc/supervisor/supervisord.conf \ 
&& sed -i 's/^\(\[include\]\)$/\1\nfiles = \/etc\/supervisor\/conf.d\/*.conf/' /etc/supervisor/supervisord.conf 

ENV UWSGI_VERSION 2.0.13.1 

RUN pip install uwsgi==${UWSGI_VERSION} 

RUN mkdir -p /etc/uwsgi \ 
&& mkdir -p /etc/uwsgi/apps-available \ 
&& mkdir -p /etc/uwsgi/apps-enabled \ 
&& mkdir -p /var/log/uwsgi 

COPY files/etc/supervisor/conf.d/uwsgi.conf /etc/supervisor/conf.d/uwsgi.conf 
COPY files/etc/uwsgi/emperor.ini /etc/uwsgi/emperor.ini 

VOLUME /etc/uwsgi/apps-enabled 
VOLUME /var/www 

ENTRYPOINT ["/usr/bin/supervisord"] 
CMD ["-c", "/etc/supervisor/supervisord.conf"] 

supervisord 프로세스는 다음 관리자 구성을 사용하여 uWSGI 프로세스를 시작하려고합니다.

# files/etc/supervisor/conf.d/uwsgi.conf 
[program:uwsgi] 
command=/usr/local/bin/uwsgi --ini /etc/uwsgi/emperor.ini 
user=root 

응용 프로그램 파이썬 파일은 /var/www의 하위 디렉토리에 설치하고 응용 프로그램 uWSGI 구성은 /etc/uwsgi/apps-enabled에 장착된다. 내가 uWSGI 제대로 emperor.ini을 처리 확인하고 하인에게 .ini 파일을 읽을 수있는 장소의 구성 및 파일로 (도커의 외부) 새로운 우분투 VM에 대한 감독 및 uWSGI을 설치하는 경우

기괴한 일이다. uWSGI를 시작하고 구성 파일을 올바르게 읽고 싶기 때문에 방정식에 nginx를 추가하려고 아직 시도하지 않았습니다.

로깅을 늘리거나 uWSGI 바이너리의 버전 번호 인 것으로 보이는 이유를 확인하는 방법이 있습니까? uWSGI 프로세스가 명령 줄 옵션을 완전히 무시하는 것과 같습니다. 나는 분명해야 할 뭔가를 놓치고있는 것처럼 느껴진다.

아무도 도와 줄 수있는 도움에 미리 감사드립니다.

+0

어떻게 uwsgi를 시작하고 오류가 있습니까? 로깅을 위해 uwsgi 설정에 logto = /path/to/project/error.log를 추가하십시오. –

+0

@MohammadAmin 감독자를 통해 uwsgi를 시작하려했는데'/ usr/local/bin/uwsgi --ini/etc/uwsgi/emperor.ini' 명령을 사용하여 루트로 직접 시도했지만 (위 참조) logto' 옵션을 사용하지만 내 이해가 없다면 uwsgi는 콘솔에 직접 로그해야합니다. 그것이 정확하다고 가정 할 때, 위에서 언급 한 것은 내가 보는 것입니다 : 오류가없고 유일한 출력은 버전 번호입니다. 감사! –

+0

나는 똑같은 문제가 있음을 기억하지만, 나는 감독관을 통해 시작하여 내 문제가 사라 졌다고 생각한다. –

답변

1

TL; DR는 버전 번호 대신 시작의를 인쇄 할 분명히이 uWSGI가 강제로, 환경 변수로 UWSGI_VERSION을 사용하지 않는?

나는 내 자신의 문제를 해결했다고 생각합니다.

Docker의 허브에있는 다른 uWSGI 이미지를 실험 한 후에도 같은 문제가 발생하여 가능한 구성 문제를 더 자세히 살펴보기 시작했습니다. 다른 것들 사이에서 권한을 변경하려고 시도했습니다.

그러나 내가 jpetazzo/nsenter을 사용하여 실행 컨테이너를 입력했을 때 위의 강조 표시된대로 uWSGI 버전 정보를 출력하는 대신 uWSGI 시작을 보았습니다. docker exec을 사용하여 입력 할 때 uWSGI는 버전 정보 만 인쇄합니다. 조금 더 놀고 난 후에, 나는 012WPGI 시작을 다시 보았던 docker exec를 사용하고있는 컨테이너 내에서 su - 명령을내는 것을 발견했다.

일부 검사를 마친 후 하나의 쉘에서사용자 사이의 환경 변수에 몇 가지 차이점을 발견했습니다. 그것은 UWSGI_VERSION을 제거하여 uWSGI를 시작할 수 있기 때문에 범인 인 것으로 보이는 환경 변수 UWSGI_VERSION으로 안내합니다.

대신 UWSGI_PIP_VERSION을 환경 변수로 사용하여 설치할 uWSGI 버전을 나타내도록 수정했습니다. 이는 UWSGI_VERSION의 안전한 대안 인 것으로 보입니다. YMMV.

+1

난 그냥 3 시간 동안이 정확한 문제로 고생하고 또한 내 Dockerfile의 UWSGI_VERSION 환경 변수가 범인이라는 것을 알아 냈습니다. 그래도 확인해 주셔서 감사합니다! –