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 關注
- 182 瀏覽
添加回答
舉報