如何解決docker logs無法實(shí)時(shí)輸出腳本打印的內(nèi)容
docker logs無法實(shí)時(shí)輸出腳本打印內(nèi)容
背景&問題
我在docker-compose.yml的command參數(shù)后面加入了一行運(yùn)行python腳本的命令:
command:python test.py
那么這條命令會(huì)在container生成的時(shí)候就開始運(yùn)行。
但是通過docker logs -f 命令來查看日志時(shí),我發(fā)現(xiàn)py腳本里通過print打印出來的東西并不會(huì)實(shí)時(shí)顯示出來,而是程序執(zhí)行完了才會(huì)顯示出來,這并不是我想要的結(jié)果。
但如果進(jìn)入container手動(dòng)執(zhí)行python腳本,就可以實(shí)時(shí)打印出來。
解決
在網(wǎng)上查找資料之后發(fā)現(xiàn),在這種情況下,python會(huì)默認(rèn)緩沖其輸出,所以想要無緩沖輸出,那么加一個(gè)“-u” 參數(shù)即可:
command: python -u test.py
這個(gè)時(shí)候再通過docker logs -f 來查看日志時(shí),你就會(huì)看到實(shí)時(shí)打印出來的結(jié)果
問題解決!
docker logs不打印python程序輸出
docker logs --tail 50 --follow a8
即使容器在正常運(yùn)行,也不會(huì)有輸出打印出來,等也沒用,且不定時(shí)的會(huì)打印一兩次,最后才發(fā)現(xiàn),原來是python的IO有緩沖,stdout堵住了導(dǎo)致了
只需在python代碼中修改print(flush=True)即可,如果是用的gunicorn或者logging等,需要重新配置下
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
CentOS7 docker服務(wù)無法啟動(dòng)解決方案及實(shí)現(xiàn)步驟
這篇文章主要介紹了CentOS7 docker服務(wù)無法啟動(dòng)解決方案及實(shí)現(xiàn)步驟的相關(guān)資料,這里對(duì)Docker 服務(wù)無法啟動(dòng)做了詳細(xì)的排查工作及流程,并附解決辦法,需要的朋友可以參考下2016-12-12
Docker Alpine鏡像時(shí)區(qū)問題完美解決方案
這篇文章主要介紹了Docker Alpine鏡像時(shí)區(qū)問題完美解決方案,本文給大家分享兩種解決方案供大家參考,需要的朋友可以參考下2021-04-04
無網(wǎng)絡(luò)docker鏡像遷移的實(shí)現(xiàn)
本文主要介紹了無網(wǎng)絡(luò)docker鏡像遷移的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-06-06
解決docker run 或者 docker restart 啟動(dòng)鏡像就自動(dòng)退出
這篇文章主要介紹了解決docker run 或者 docker restart 啟動(dòng)鏡像就自動(dòng)退出的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-11-11
如何使用Docker部署Go Web應(yīng)用的實(shí)現(xiàn)
這篇文章主要介紹了如何使用Docker部署Go Web應(yīng)用的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Docker自定義安裝更改默認(rèn)安裝位置簡(jiǎn)單方法
安裝Docker的過程相對(duì)簡(jiǎn)單,你只需要雙擊下載的安裝程序并按照提示進(jìn)行安裝即可。在安裝過程中,你可以選擇自定義安裝選項(xiàng),這篇文章主要給大家介紹了關(guān)于Docker自定義安裝更改默認(rèn)安裝位置的簡(jiǎn)單方法,需要的朋友可以參考下2024-01-01

