登录
首页 >  Golang >  Go问答

Docker 化面向包的设计 go 模块应用程序

来源:stackoverflow

时间:2024-03-31 21:45:32 257浏览 收藏

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《Docker 化面向包的设计 go 模块应用程序》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习!

问题内容

我正在以此处描述的面向包的设计方式尝试 go 模块,以便可以“dockerized”多个可执行服务,但我正在努力在单个存储库中正确连接事物。我无法使用这种方法成功构建 docker 映像。大多数在线示例都面向单模块方法,其中 main.go 和 dockerfile 位于根文件夹中。

我的目录结构如下所示 项目1 - api - 建造 - 服务1 - dockerfile - 服务2 - dockerfile -命令 - 服务1 - main.go - 服务2 - main.go - 部署 - 文档 - 内部的 - 第三者 - 去.mod - 去总和 - 生成文件 - 供应商

# accept the go version for the image to be set as a build argument.
# default to go 1.11
arg go_version=1.11

# first stage: build the executable.
from golang:${go_version}-alpine as builder

# create the user and group files that will be used in the running container to
# run the process as an unprivileged user.
run mkdir /user && \
    echo 'nobody:x:65534:65534:nobody:/:' > /user/passwd && \
    echo 'nobody:x:65534:' > /user/group

# install the certificate-authority certificates for the service1 to be able to make
# calls to https endpoints.
run apk add --no-cache ca-certificates

# set the environment variables for the go command:
# * cgo_enabled=0 to build a statically-linked executable
# * goflags=-mod=vendor to force `go build` to look into the `/vendor` folder.
env cgo_enabled=0 goflags=-mod=vendor

# set the working directory outside $gopath to enable the support for modules.
workdir /src

# import the code from the context.
copy ./ ./

# build the executable to `/service1`. mark the build as statically linked.
run go build \
    -installsuffix 'static' \
    -o /service1 .

# final stage: the running container.
from scratch as final

# import the user and group files from the first stage.
copy --from=builder /user/group /user/passwd /etc/

# import the certificate-authority certificates for enabling https.
copy --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/

# import the compiled executable from the second stage.
copy --from=builder /service1 /service1

expose 8080

# # run the compiled binary.
entrypoint ["/service1"]

当我运行 docker build -t service1:v0.0.1 . 时,我的所有依赖项都会出现此错误

/go/src/github.com/.../project1/internal/pkg/common (from $GOPATH)
main.go:15:2: cannot find package "github.com/.../project1/internal/pkg/delegates" in any of:
        /usr/local/go/src/github.com/.../project1/internal/pkg/delegates (from $GOROOT)
        /go/src/github.com/.../project1/internal/pkg/delegates (from $GOPATH)
main.go:16:2: cannot find package "github.com/.../project1/internal/pkg/secure" in any of:
        /usr/local/go/src/github.com/.../project1/internal/pkg/secure (from $GOROOT)
        /go/src/github.com/.../project1/internal/pkg/secure (from $GOPATH)
main.go:17:2: cannot find package "github.com/.../project1/statik" in any of:
        /usr/local/go/src/github.com/.../project1/statik (from $GOROOT)
        /go/src/github.com/.../project1/statik (from $GOPATH)
main.go:18:2: cannot find package "github.com/grpc-ecosystem/grpc-gateway/runtime" in any of:
        /usr/local/go/src/github.com/grpc-ecosystem/grpc-gateway/runtime (from $GOROOT)
        /go/src/github.com/grpc-ecosystem/grpc-gateway/runtime (from $GOPATH)
main.go:19:2: cannot find package "github.com/heptiolabs/healthcheck" in any of:
        /usr/local/go/src/github.com/heptiolabs/healthcheck (from $GOROOT)
        /go/src/github.com/heptiolabs/healthcheck (from $GOPATH)
main.go:21:2: cannot find package "github.com/rakyll/statik/fs" in any of:
        /usr/local/go/src/github.com/rakyll/statik/fs (from $GOROOT)
        /go/src/github.com/rakyll/statik/fs (from $GOPATH)
main.go:22:2: cannot find package "github.com/sirupsen/logrus" in any of:
        /usr/local/go/src/github.com/sirupsen/logrus (from $GOROOT)
        /go/src/github.com/sirupsen/logrus (from $GOPATH)
main.go:23:2: cannot find package "google.golang.org/grpc" in any of:
        /usr/local/go/src/google.golang.org/grpc (from $GOROOT)
        /go/src/google.golang.org/grpc (from $GOPATH)

基本上它找不到所有依赖项...


解决方案


这看起来像是您在构建项目时没有在 GOPATH 之外启用实验模块。

尝试将源代码复制到 /go/src/github.com/your-name/project1 并在那里构建项目。

本篇关于《Docker 化面向包的设计 go 模块应用程序》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>