나는 얻으려고 노력하고있다실시간 표준 출력도커 컨테이너 내부에서 실행하는 명령에서. 그러나 다른 호스트에서 실행되는 원격 명령을 통해 이 작업을 수행해야 합니다.
Docker 호스트에 있을 때 Docker 명령을 실행 -it
하고 필요한 실시간 출력을 얻을 수 있습니다. 그런데 저는 이런 한계가 있어서가지다명령을 원격으로 실행하면 이전 솔루션이 쓸모 없게 됩니다. -t
터미널이 전혀 없어서 원격 명령에는 존재하지 않는 $TERM 기반의 의사 터미널을 실행하기 때문에 사용할 수 없습니다 .
-d
또한 백그라운드에서 실행하기 위해 docker 명령을 실행해 보았지만 docker logs -f <container>
프로세스가 끝나면 여전히 한 번에 출력이 제공됩니다.
이것이 다른 스택에 속해 있다면 어떤 해결책이나 제안이라도 감사히 여기고 바로잡을 것입니다.
답변1
Docker의 github에 대한 도움말에서 이것을 찾았습니다. 컨테이너에서 Python 스크립트를 실행하려고 한다는 사실은 언급하지 않았지만 그게 중요하지 않다고 생각합니다.
이것은 실제로 Docker 문제가 아니라 Python 문제입니다. 나는 배웠다Docker는 이미 실시간 표준 출력을 제공합니다.. Python은 모든 표준 출력을 버퍼에 저장하고 스크립트가 완료될 때까지 플러시하지 않습니다. 코드에 -t
.
docker 명령에서 필요한 것은 python -u <script>
Python이 stdout을 버퍼링하지 못하도록 스크립트를 호출하는 것뿐입니다.
답변2
그렇다면 ELK 스택과 Logsprout를 사용하면 모든 Docker 컨테이너에서 실시간 로그를 얻을 수 있고 로그 및 기타 유용한 항목 내에서 검색할 수 있습니다.