为了账号安全,请及时绑定邮箱和手机立即绑定

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条经验 获得超3个赞

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 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信