猿问

Docker 容器未正确设置 GOPATH

当我尝试在 Docker 容器中运行我的应用时,我遇到了一个问题。它运行得很好,但是每当我构建一个映像并运行docker容器时,我都会得到错误,所以我想GOPATH没有在docker容器中正确设置(我使用来自其他项目的相同docker文件,我没有任何问题)。我在这里有点迷茫,因为这种方法我已经使用了一段时间而没有问题。go run main.gopanic: html/template: pattern matches no files: *.html


我正在使用杜松子酒作为开发的框架。


docker 文件是:


FROM golang:alpine as builder


RUN apk update && apk add git && apk add ca-certificates 

# For email certificate

RUN apk add -U --no-cache ca-certificates


COPY . $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 Server

RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags="-w -s" -o /go/bin/advanced-performance $GOPATH/src/github.com/kiketordera/advanced-performance


FROM scratch

COPY --from=builder /go/bin/advanced-performance /advanced-performance

COPY --from=builder /go/src/github.com/kiketordera/advanced-performance/media/ /go/src/github.com/kiketordera/advanced-performance/media/


# For email certificate

VOLUME /etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt

COPY --from=alpine /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/


EXPOSE 8050/tcp


ENV GOPATH /go

ENTRYPOINT ["/advanced-performance"]

主要功能是:


package main


import (

    "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表单处理程序


慕桂英546537
浏览 87回答 1
1回答

守着一只汪

GOPATH无关紧要;它用于“解析 import 语句”,在运行可执行文件时不起任何作用(除非您的代码专门引用它!这就是问题所在。WORKDIR从“清除由先前指令创建的任何状态”。这包括 .例如,如果您使用 docker 文件:WORKDIRFROM alpine:3.12WORKDIR /testcopy 1.txt .FROM alpine:3.12copy 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
随时随地看视频慕课网APP

相关分类

Go
我要回答