如何在Docker中安装私有依赖项

时间:2018-11-16 16:15:06

标签: docker go

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

aapt add app.apk.unaligned ./bin/classes.dex

但是对于每个私有依赖项,我都会收到以下错误消息:

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

当我在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 get ./..时,每个软件包都会收到以下错误消息:

RUN go build -o main .

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

我尝试了几种解决方案,但是都没有用。我总是最终遇到上述错误。既然这是我的第一个docker + golang项目,那么有没有准备好将dockerfiles用于具有公共和私有依赖关系的golang应用程序?

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

1 个答案:

答案 0 :(得分:1)

您的依赖项可能存储在GOPATH/src/<import-path>中,您可以使用go get工具进行管理。

考虑vendoringdepmodules之类的工具

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

您还可以改善创建Docker图像的方式。

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

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

  1. 使用编译工具
  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"]