2015-01-21 5 views
5

CMD 명령어의 일부로 여러 명령을 실행해야하는 Dockerfile을 작성 중이므로 exec을 통해 실행되는 주 데몬으로 쉘 스크립트를 실행하는 것이 올바른 방법이라고 생각했습니다. 불행히도, 그 과정의 일부로 내 출력 (stdout? stderr? 나도 몰라, 알아내는 법을 모르겠다)이 손실된다.docker/fig로 Django 개발 서버를 실행할 때 일부 로그 출력이 숨겨져있는 이유는 무엇입니까?

다음은 쉘 스크립트입니다 :

#!/bin/sh 

python manage.py migrate 
exec python manage.py runserver 0.0.0.0:8000 

migrate 명령을 한 번만 실행되고 출력이 표시 한 다음 runserver 명령을 인수해야하며 용기는 그 프로세스가 종료 될 때까지 실행되는 것으로 생각.

실제 문제는 migrate의 출력이 올바르게 표시되지만 즉시 출력은 runserver이 표시되지 않습니다. 이상하게도 나중에 로깅 요청이 runserver으로 잘 표시됩니다.

명확히하기 위해, 여기에 내가 예상 출력입니다 :

[...] 
No migrations to apply. 
[...] 
Starting development server at http://0.0.0.0:8000/ 
Quit the server with CONTROL-C. 
[21/Jan/2015 16:27:06] "GET/HTTP/1.1" 200 15829 

가 여기에 내가 fig up으로지고있어 무엇 :

[...] 
No migrations to apply. 
[...] 
[21/Jan/2015 16:27:06] "GET/HTTP/1.1" 200 15829 

나는 이것이 잘못 누가 모르겠어요. runserver 명령은 실행 방법에 따라 출력이 변경됩니까? exec에 문제가 있습니까? 그것은 도커/무화과인가?

추가 데이터 포인트로, fig run web을 사용하여 컨테이너를 실행할 때 모든 출력을 얻었지만 fig up을 수행 할 때가 아니라는 것을 알았지 만 그것이 다른지 또는 관련성이 있는지 이해하지 못합니다.

참고 : 태그 스팸에 대해 죄송합니다. 실제로이 효과를 일으키는 원인을 알았다면 태그를 줄입니다.

+0

출력을 수동으로 리디렉션하고 나중에 ">>"리디렉션을 사용할 수 있습니다. – Paul

+0

@Paul 당신은 무엇을 의미합니까? '''추가 리다이렉션을 사용하지 않고있다. –

+0

각 실행 서버 전에 마이그레이션을 실행해야하는 이유는 무엇입니까? 'django-admin.py'를 진입 점으로 만들고'fig run migrate'와 같이 마이그레이션을 수행 할 수 있습니다. –

답변

5

오늘이 독창적 인 문제는 도커 작곡가를 사용하여 발견되었습니다. 파이썬 로깅 모듈은 출력이 터미널인지 확인하므로 tty: true을 서비스에 추가해야합니다. 예 :

version: '2' 
services: 
    django: 
    tty: true 
    command: python -u manage.py runserver 0.0.0.0:8080 
    ports: 
    - "8080:8080" 
+0

지금 당장이 기능을 테스트 할 수는 없지만 그럴듯한 설명처럼 들리므로 여기에 결과를 게시 해 주셔서 감사합니다! –

+0

완벽하게 작동합니다. 덕분에 대단히 감사합니다. 이 대답을 받아 들여야합니다. –

+0

Robin의 확인을 기반으로 허용됩니다. –