> 백엔드 개발 > 파이썬 튜토리얼 > 분리된 Docker Python 컨테이너에 인쇄 출력이 표시되지 않는 이유는 무엇입니까?

분리된 Docker Python 컨테이너에 인쇄 출력이 표시되지 않는 이유는 무엇입니까?

DDD
풀어 주다: 2024-12-06 20:30:16
원래의
660명이 탐색했습니다.

Why Doesn't My Detached Docker Python Container Show Print Output?

분리된 Docker Python 컨테이너의 인쇄 동작 이해

분리된 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿