3 回答
TA贡献1804条经验 获得超7个赞
在 Dockerfile 的第二阶段,您只是从前一阶段复制 Go 二进制文件。您还必须将您的templates目录也复制到第二阶段,以便 Go 二进制文件可以引用您的 HTML 模板:
FROM golang:1.8-alpine
RUN apk add --update go git
RUN go get github.com/lib/pq/...
ADD . /go/src/hello-app
RUN go install hello-app
ENV USER=username \
PASSWORD=password \
DB=dbname \
HOST=hostname \
PORT=5432
FROM alpine:latest
COPY --from=0 /go/bin/hello-app/ .
COPY --from=0 /go/src/hello-app/templates ./templates
ENV PORT 4040
CMD ["./hello-app"]
我不确定这是否是常见做法,但是当我对构建过程中的哪个文件夹中的内容感到困惑时,我只是简单地列出有问题的目录,ls以便更好地了解构建过程中可能发生的情况:
RUN ls
显然,您可以在完成 Dockerfile 后删除这些行。
TA贡献1815条经验 获得超13个赞
该错误是因为template.ParseGlob
在您的模板目录中找不到任何匹配的文件。而不是COPY --from=0 /go/bin/hello-app/ .
尝试使用复制整个目录COPY <YOUR LOCAL GOPATH/src/hello-app> <DOCKER DIR PATH>
。此外,当您构建应用程序时,您的模板文件夹仍将位于源文件夹中,因此这也可能导致问题。go build
解决方案是在应用程序目录中运行并使用COPY
我的命令。
TA贡献1898条经验 获得超8个赞
我的模板文件夹遇到了同样的错误,但通过在我的 Dockerfile 中使用此命令从我的根文件夹复制所有文件来解决它:
COPY . .
此外,当您使用外部库时,您可能希望启用 GO111MODULE。
在您的终端 (MacOS) 中:
export GO111MODULE=on
go mod init
在你的 Dockerfile 中:
COPY go.mod .
RUN go mod download
- 3 回答
- 0 关注
- 146 浏览
添加回答
举报