docker - 无法使用 Docker 为 Golang 应用程序创建镜像

标签 docker go dockerfile

我尝试为我的 Golang 应用程序创建一个图像,但 Docker 只是写:

Step 7/9 : RUN go install ./accounting/server
 ---> Running in f998ba6a5efb
can't load package: package grpcProjects/multiService/accounting/server: cannot find package "grpcProjects/multiService/accounting/server" in any of:
        /usr/local/go/src/grpcProjects/multiService/accounting/server (from $GOROOT)
        /go/src/grpcProjects/multiService/accounting/server (from $GOPATH)

我的 Dockerfile:

FROM golang:1.10.4

ADD . /go/src/grpcProjects/multiService

WORKDIR /go/src/grpcProjects/multiService

RUN go get github.com/golang/protobuf/proto
RUN go get golang.org/x/net/context
RUN go get google.golang.org/grpc
RUN go install ./accounting/server

ENTRYPOINT [ "/go/bin/server" ]

EXPOSE 8080

项目结构:

enter image description here

如何解决这个问题?

最佳答案

我找到了解决方案。一切都出错了,因为我从项目的根目录使用了这个命令:

$ docker build -t accounting_server ./accounting

multiService/accounting 是我的构建目录,所以图像中的文件层次结构如下所示:

/go/src/grpcProjects/multiService
/go/src/grpcProjects/multiService/server
/go/src/grpcProjects/multiService/server/service
/go/src/grpcProjects/multiService/server/service/accounting.go
/go/src/grpcProjects/multiService/server/main.go
/go/src/grpcProjects/multiService/proto
/go/src/grpcProjects/multiService/proto/accounting.proto
/go/src/grpcProjects/multiService/proto/accounting.pb.go
/go/src/grpcProjects/multiService/Dockerfile

Docker只是将本地/multiService/accounting的内容复制到镜像的/multiService目录下。所以我不得不稍微更改一下 Dockerfile:

FROM golang:1.10.4

ADD . /go/src/grpcProjects/multiService

RUN go get github.com/golang/protobuf/proto
RUN go get golang.org/x/net/context
RUN go get google.golang.org/grpc
RUN go install grpcProjects/multiService/accounting/server

ENTRYPOINT [ "/go/bin/server" ]

EXPOSE 8080

然后我用下一个命令构建了我的容器:

$ docker build -t accounting_server -f ./accounting/Dockerfile .

仍然来自根目录,因此所有内容都已正确复制到图像中。

感谢所有回复的人!

关于docker - 无法使用 Docker 为 Golang 应用程序创建镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55343787/

相关文章:

docker - 如何将 docker 卷映射到谷歌计算引擎永久磁盘

linux - Docker 中的 TCP、UDP 和 HTTP 服务器在启动容器后立即停止?

go - 如何使用go-lang提取Kubernetes中的事件HPA

unit-testing - 如何使用sqlmock mock db,函数内获取的db连接

ldap密码属性的Golang utf16le编码

docker - 如何在一个 Github Actions Docker 中运行多个命令

docker - 无法连接到 unix :///var/run/docker. socks 上的 Docker 守护进程。 docker 守护进程是否正在运行?在 Dockerfile 中

node.js - 如何使用 jwilder/nginx-proxy 设置反向代理?

docker - Docker容器-Couchbase服务器节点内部IP地址

java - 无法从 docker 容器运行我的 Java 8 应用程序