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

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

Docker 容器未正確設置 GOPATH

Docker 容器未正確設置 GOPATH

Go
慕桂英546537 2022-08-15 10:51:43
當我嘗試在 Docker 容器中運行我的應用時,我遇到了一個問題。它運行得很好,但是每當我構建一個映像并運行docker容器時,我都會得到錯誤,所以我想GOPATH沒有在docker容器中正確設置(我使用來自其他項目的相同docker文件,我沒有任何問題)。我在這里有點迷茫,因為這種方法我已經使用了一段時間而沒有問題。go run main.gopanic: html/template: pattern matches no files: *.html我正在使用杜松子酒作為開發的框架。docker 文件是:FROM golang:alpine as builderRUN apk update && apk add git && apk add ca-certificates # For email certificateRUN apk add -U --no-cache ca-certificatesCOPY . $GOPATH/src/github.com/kiketordera/advanced-performance/WORKDIR $GOPATH/src/github.com/kiketordera/advanced-performance/RUN go get -d -v $GOPATH/src/github.com/kiketordera/advanced-performance# For Cloud ServerRUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags="-w -s" -o /go/bin/advanced-performance $GOPATH/src/github.com/kiketordera/advanced-performanceFROM scratchCOPY --from=builder /go/bin/advanced-performance /advanced-performanceCOPY --from=builder /go/src/github.com/kiketordera/advanced-performance/media/ /go/src/github.com/kiketordera/advanced-performance/media/# For email certificateVOLUME /etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crtCOPY --from=alpine /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/EXPOSE 8050/tcpENV GOPATH /goENTRYPOINT ["/advanced-performance"]主要功能是:package mainimport (    "fmt"    "net/http"    "github.com/gin-gonic/gin"    i18n "github.com/suisrc/gin-i18n"    "golang.org/x/text/language")func main() {    // We create the instance for Gin    r := gin.Default()    /* Internationalization for showing the right language to match the browser's  default settings    */    bundle := i18n.NewBundle(        language.English,        "text/en.toml",        "text/es.toml",    )}完整的項目可以在 https://github.com/kiketordera/advanced-performance 中找到,是一個簡單的網站渲染,帶有i18n和一個POST表單處理程序
查看完整描述

1 回答

?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

GOPATH無關緊要;它用于“解析 import 語句”,在運行可執行文件時不起任何作用(除非您的代碼專門引用它!這就是問題所在。WORKDIR


從“清除由先前指令創建的任何狀態”。這包括 .例如,如果您使用 docker 文件:WORKDIR


FROM alpine:3.12

WORKDIR /test

copy 1.txt .


FROM alpine:3.12

copy 2.txt .

最終生成的圖像將在根文件夾(而不是文件夾)中包含文件。2.txt/test


在您的中,您正在將文件夾復制到假設將設置;但事實并非如此(默認為 )。最簡單的解決方法是更改為 。dockerfilemedia/go/src/github.com/kiketordera/advanced-performance/media/WORKDIR/COPY --from=builder /go/src/github.com/kiketordera/advanced-performance/media/ /go/src/github.com/kiketordera/advanced-performance/media/COPY --from=builder /go/src/github.com/kiketordera/advanced-performance/media/ /media/


您還從根文件夾訪問文件,因此需要將這些文件復制到(或類似文件夾中)。鑒于您正在執行此操作,最好將所有內容(exe,html文件和媒體文件夾)放入一個文件夾(例如)中,以保持根文件夾的清潔。COPY --from=builder /go/src/github.com/kiketordera/advanced-performance/*.html //app


注意:無需在第二張圖像中設置;如上所述,運行可執行文件時它不相關。我建議使用模塊(對GOPATH的支持可能會在1.17中刪除);這也將使您大大縮短路徑!GOPATH


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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