我对 Go 语言还很陌生。我有一个非常简单的 dockerFile 正在尝试构建 goLang Web 服务。
FROM golang:alpine
WORKDIR /app/webservice_refArch
ADD . /app/webservice_refArch
RUN apk add git
RUN apk upgrade
RUN cd /app/webservice_refArch/ && go get webservice_refArch/restapi
RUN cd /app/webservice_refArch/cmd/reference-w-s-server && go build -o ../../server
ENTRYPOINT ./goapp
当构建运行时,它找不到本地导入。
go get webservice_refArch/restapi
我得到的错误是:
包 webservice_refArch/restapi:无法识别的导入路径
“webservice_refArch/restapi”(导入路径不以
主机名)
当我在本地(同一文件夹中)运行相同的命令时,它运行得很好。我确信我错过了一些愚蠢的东西,但任何关于从 docker 运行时失败的原因的想法将不胜感激。
缺少的是将您的项目放在$GOPATH
如果您有本地命名空间,它也应该位于同一命名空间下$GOPATH/domain.com/
.
实现这一点的正确方法是进行多阶段构建。多阶段涉及的基本原理包括调用一个可以促进应用程序构建的临时容器,然后将构建的资产从该空间复制到具有运行应用程序所需的最少组件的容器映像中。
# builder
FROM golang:1-alpine AS builder
RUN apk add git ca-certificates --update
ENV SERVICE_NAME my_project
ENV NAMESPACE mydomain #if you don't use namespace space just ignore it and remove it from the following lines
ENV APP /src/${NAMESPACE}/${SERVICE_NAME}/
ENV WORKDIR ${GOPATH}${APP}
WORKDIR $WORKDIR
ADD . $WORKDIR
RUN go build
###############################################################
#image
FROM alpine
RUN apk add ca-certificates --update
ENV SERVICE_NAME webservice_refArch
ENV NAMESPACE my_domain #if you don't use namespace space just ignore it and remove it from the following lines
ENV APP /src/${NAMESPACE}/${SERVICE_NAME}/
ENV GOPATH /go
ENV WORKDIR ${GOPATH}${APP}
COPY --from=builder ${WORKDIR}${SERVICE_NAME} $WORKDIR
CMD ${WORKDIR}${SERVICE_NAME}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)