분리된 Docker 컨테이너 내에서 실행되는 Python 애플리케이션에서 print 문을 사용할 때 출력이 부족할 수 있습니다. 이 문제는 STDOUT 및 STDERR 스트림이 컨테이너 내에 버퍼링될 때 발생합니다.
Docker의 CMD ["python","main.py를 사용하여 Python 앱(2.7)을 실행할 때 "], main.py 스크립트는 "App selected"라는 인쇄로 초기화되고 무한 루프에 들어갑니다. -it 플래그를 사용하여 컨테이너를 관찰하면 터미널과 Docker 로그 모두에 예상 출력이 표시됩니다.
그러나 -d 플래그(분리 모드)를 사용하면 컨테이너가 시작되지만 예상 출력이 컨테이너에 표시되지 않습니다.
이 문제를 해결하려면 Python의 버퍼링되지 않은 출력 옵션을 활용할 수 있습니다. Dockerfile CMD를 CMD ["python","-u","main.py"]로 수정하면 STDOUT 및 STDERR의 버퍼링이 비활성화됩니다. 이를 통해 Python이 즉시 인쇄할 수 있어 docker 로그 myapp을 쿼리할 때 출력이 표시됩니다.
-u 인수는 Python이 출력을 기다리지 않고 표준 스트림으로 플러시하도록 강제합니다. 채울 버퍼. 이렇게 하면 스크립트가 백그라운드에서 실행 중인 경우에도 인쇄가 즉시 표시됩니다.
인쇄와 달리 로깅 모듈의 login.warning("text") 함수를 사용합니다. 버퍼링되지 않은 모드 없이도 즉시 출력을 생성합니다. 이는 로깅이 내부적으로 플러시를 처리하기 때문입니다.
-u 옵션에 대한 Python 문서에는 STDOUT 및 STDERR 스트림을 모두 버퍼링 해제하여 분리된 컨테이너에 실시간 출력 표시를 허용한다고 명시되어 있습니다.
위 내용은 분리된 Docker Python 컨테이너에 인쇄 출력이 표시되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!