我有一个使用Golang的应用程序,我想基于this tutorial对它进行“dockerize”
这是项目结构:
docker - Docker-Golang找不到软件包-LMLPHP
Dockerfile:

FROM golang:1.12.7-alpine3.9
RUN mkdir /app
ADD . /app
WORKDIR /app
RUN go build -o main .
CMD ["/app/main"]
当我尝试运行此命令时:
docker build -t pln-monitoring .
它显示此错误:
Step 5/6 : RUN go build -o main .
 ---> Running in 5e3c84f1435d
main.go:12:2: cannot find package "github.com/geshtng/pln-monitoring/middleware" in any of:
        /usr/local/go/src/github.com/geshtng/pln-monitoring/middleware (from $GOROOT)
        /go/src/github.com/geshtng/pln-monitoring/middleware (from $GOPATH)
main.go:13:2: cannot find package "github.com/geshtng/pln-monitoring/pkg/common/config" in any of:
        /usr/local/go/src/github.com/geshtng/pln-monitoring/pkg/common/config (from $GOROOT)
        /go/src/github.com/geshtng/pln-monitoring/pkg/common/config (from $GOPATH)

最佳答案

之所以失败,是因为docker内部无法使用golang程序使用的依赖项来成功构建它。
您正在使用dep进行依赖项管理,即本地使用外部库,但尚未在docker中安装它们。
您需要通过在容器中安装第一个dep工具使它们在docker中可用。 dep工具将确保dep ensure可以使用您的软件包所需的依赖项
另外,理想情况下,您还应该将存储库放入$ GOPATH中,如下所述
dockerfile将需要以下命令:

FROM golang:1.12
RUN mkdir /go/src/app
RUN go get -u github.com/golang/dep/cmd/dep

ADD ./main.go /go/src/app
COPY ./Gopkg.toml /go/src/app

WORKDIR /go/src/app

RUN dep ensure
RUN go build
CMD ["./app"]
这对于您阅读dep here的Go模块和差异可能也很有用

关于docker - Docker-Golang找不到软件包,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62669249/

10-16 08:29