亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

go 不會從容器中寫入文件,除非應用程序是從容器中手動啟動的

go 不會從容器中寫入文件,除非應用程序是從容器中手動啟動的

Go
子衿沉夜 2022-10-10 16:49:16
我寫了一個小 golang 應用程序。它做兩件事:處理 http://localhost:5000每秒寫一個日志此應用程序位于 docker 容器內。你可以看到的記錄器是我的,只是一個練習。申請開始。如果我 curl http://localhost:5000 我可以看到“Ciao,mondo!”。但是記錄器沒有啟動。奇怪的是,如果我進入容器,我手動運行應用程序。記錄器開始記錄。我認為這可能是權限問題。這里是 docker-compose。version: "3.9"services:    app:        container_name: 'go_docker_app'        build:            dockerfile: Dockerfile            context: .        volumes:            - ./logs:/app/logs            - .:/opt/app/api        ports:            - "5000:5000"這里是 main.go 文件package mainimport (        "fmt"        "net/http"        "time"        "github.com/sensorario/gol")func main() {    http.HandleFunc("/", HelloServer);    http.ListenAndServe(":5000", nil);    go forever()    select{}}func HelloServer(w http.ResponseWriter, r *http.Request) {    fmt.Fprintf(w, "Ciao, mondo!");}func forever() {    l := gol.NewCustomLogger("/app");    for {        l.Info(fmt.Sprintf("%v+\n", time.Now()));        time.Sleep(time.Second)    }}這里是 Dockerfile我嘗試了更多解決方案。例如從 Dockerfile 創建 logger.log。我不認為是權限問題,因為我沒有錯誤。FROM golang:1.17-alpineRUN mkdir -p /app/logsADD . /appWORKDIR /appRUN go get -d -v ./...RUN go install -v ./...RUN go build -o /applicationEXPOSE 5000RUN touch /app/logs/logger.logCMD ["/application"]
查看完整描述

1 回答

?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

這是由于ListenAndServe在你的 goroutine 之前運行引起的。go forever()從不執行,所以它不會輸出任何日志文件。

奇怪的是,如果我進入容器,我手動運行應用程序。記錄器開始記錄。

我假設您在運行容器上執行,您的應用程序的一個實例已經在運行,因此端口 5000已經被占用。您沒有任何錯誤處理,因此它會跳過它并轉到forever()函數。select{}不需要空,因為ListenAndServe會“阻止”程序:一個很好的解釋https://stackoverflow.com/a/44598343/14484111

func main() {


    go forever()

    http.HandleFunc("/", HelloServer);


    // added error validating

    err := http.ListenAndServe(":5000", nil);

    log.Fatal(err)


    // or shorter version

    // log.Fatal(http.ListenAndServe(":5000", nil))


}


查看完整回答
反對 回復 2022-10-10
  • 1 回答
  • 0 關注
  • 91 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號