gpt4 book ai didi

docker - Golang 构建在 docker 中找不到本地导入

转载 作者:IT王子 更新时间:2023-10-29 01:04:10 26 4
gpt4 key购买 nike

我是 GoLang 的新手。我有一个非常简单的 dockerFile,它正在尝试构建一个 goLang 网络服务。

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

我得到的错误是:

package webservice_refArch/restapi: unrecognized import path "webservice_refArch/restapi" (import path does not begin with hostname)

当我在我的本地(在同一文件夹中)运行相同的命令时,它运行得很好。我确信我遗漏了一些愚蠢的东西,但是任何关于从 docker 运行时为什么会失败的想法都将不胜感激。

最佳答案

缺少的是将您的项目放在 $GOPATH 下,如果您有本地命名空间,它也应该位于相同的命名空间 $GOPATH/domain.com/ 下。

一个正确的方法也是进行多阶段构建。 Multi-stage 涉及的基本原则涉及调用一个可以促进应用程序构建的临时容器,然后将构建的 Assets 从该空间复制到一个容器镜像中,该容器镜像具有运行应用程序所需的最少组件。

# 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}

关于docker - Golang 构建在 docker 中找不到本地导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51219800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com