一尘不染

使用Go应用构建Docker:找不到软件包

docker

我的Dockerfile位于src/myapp文件夹的根目录中,myapp包含myapp.go在主包中。

Dockerfile 看起来如下:

FROM golang:1.9.2

ADD . /
RUN go build myapp;

ENTRYPOINT ["/go/bin/myapp"]

我收到以下错误:

can't load package: package myapp: cannot find package "myapp" in any of:
    /usr/local/go/src/myapp (from $GOROOT)
    /go/src/myapp (from $GOPATH)

我究竟做错了什么?ls码头工人完成后可以登录命令ADD吗?


阅读 304

收藏
2020-06-17

共1个答案

一尘不染

您正在将所有文件复制到Image根目录,未安装任何依赖项,尝试构建它,然后从运行二进制文件/go/bin/app。该目录中不存在二进制文件,并且正在生成错误。

我建议使用这样的Dockerfile,

FROM golang:1.9.2 
ADD . /go/src/myapp
WORKDIR /go/src/myapp
RUN go get myapp
RUN go install
ENTRYPOINT ["/go/bin/myapp"]

这将执行以下操作。

  1. 将项目文件复制到/go/src/myapp
  2. 将工作目录设置为/go/src/myapp
  3. 安装依赖项,我使用了go get,但将其替换为您正在使用的任何依赖项管理工具。
  4. 安装/构建二进制文件。
  5. 设置入口点。

您可以使用运行ls命令或任何其他命令docker exec

例:

docker exec <image name/hash> ls

您还可以在生成的图像中输入外壳以使用

docker run --rm -it <image hash/name> /bin/sh
2020-06-17