gpt4 book ai didi

docker - 如何在 Docker 中安装私有(private)依赖项

转载 作者:IT王子 更新时间:2023-10-29 02:08:21 25 4
gpt4 key购买 nike

我正在尝试在 docker 容器中获取一个 Go 应用程序。这是我的第一个更大的 Go 和 Docker 项目。只要我在本地机器上运行 go 程序就可以正常运行,现在我想在 docker 容器内的 EC2 上运行它。我的 docker 文件如下所示:

FROM golang:latest 
RUN mkdir /tir
ADD . /tir
WORKDIR /tir
RUN go build -o main .
CMD ["/app/main"]

但对于每个私有(private)依赖项,我都会收到以下错误:

main.go:17:2: cannot find package "github.com/ser/model" in any of:
/usr/local/go/src/github.com/ser/model (from $GOROOT)
/go/src/github.com/ser/model (from $GOPATH)

当我在 RUN go build -o main . 之前插入 RUN go get ./.. 时,每个包都会出现以下错误:

fatal: could not read Username for 'https://github.com': terminal prompts disabled

包 github.com/ser/endpoints:退出状态 128

我尝试了几个解决方案,但都没有奏效。我总是以上述错误告终。由于这是我的第一个 docker + golang 项目,是否有任何准备好将 dockerfiles 用于具有公共(public)和私有(private)依赖项的 golang 应用程序?

更新:我卸载了 go,并一个一个地复制了每个文件,并在每个文件之后使用了 dep -ensure。现在可以了,谢谢 :D

最佳答案

您的依赖项可能存储在 GOPATH/src/<import-path> 中你用go get管理它们工具。

考虑 vendoring和工具,如 depmodules

因此,您的依赖项将包含在源代码管理中,并且项目将更加可移植。

您还可以改进创建 Docker 的方式图片。

当前的实现使用一个包含整个 GO 的容器工具链。代码被复制到该容器内部,容器编译并托管代码。只有稍后才是生产所必需的。

更好的选择是使用 2 个容器:

  1. Go 编译工具
  2. 仅托管二进制文件的轻量级容器
# Debian image with the latest version of Go installed
# and a workspace (GOPATH) configured at /go.
FROM golang:1.11 as builder
WORKDIR /go/src/github.com/space/project/

# Copy the local package files to the container's workspace.
ADD . /go/src/github.com/space/project/

# Build the service inside the container.
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

FROM centurylink/ca-certs
EXPOSE 8080

# Copy app
COPY --from=builder /go/src/github.com/space/project/app /
ENTRYPOINT ["/app"]

关于docker - 如何在 Docker 中安装私有(private)依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53341665/

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