如何使用我的本地go包构建docker镜像?

时间:2018-04-12 05:46:58

标签: docker go package packages

我的main.go文件的路径: /gowork/src/dockerpkgmain/main.go

我的包文件的路径: /gowork/src/dockerpkg/mult/mult.go

我的docker文件路径: / gowork / SRC / dockerpkgmain / Dockerfile

main.go:

package main

import (
    "dockerpkg/mult"
    "fmt"
)

func main() {
    fmt.Println("From different pkg")
    mult.Multiple()
}

mult.go:

package mult

import (
    "flag"
    "fmt"
)

func Multiple() {

    first := flag.Int("f", 0, "placeholder")
    second := flag.Int("s", 0, "placeholder")
    flag.Parse()
    out := (*first) * (*second)
    fmt.Println(out)

}

Dockerfile:

FROM golang:1.9.1

COPY . /go/src/dockerpkg/mult 

WORKDIR /go/src/app
COPY . .

ADD . /go/src/dockerpkg/mult
RUN go get -d -v ./...
RUN go install -v ./...

CMD ["app"]

ENTRYPOINT ["app", "-f=7", "-s=9"]

如果我尝试

COPY . /go/src/dockerpkg/mult

我明白了:

  

main.go:4:2:import" dockerpkg / mult"是一个程序,不是可导入的   封装

我必须在dockerfile中放置什么来构建我的图像而不改变项目结构?

1 个答案:

答案 0 :(得分:1)

根据你的文件夹布局,我猜你当地的$ GOPATH是/gowork文件夹。在golang docker镜像中,它的$ GOPATH是/go文件夹。

您必须在此位置/gowork/src/Dockerfile创建泊坞窗文件,然后在其中添加以下内容。它可以在我的环境中使用您的代码。

FROM golang:1.9.1

COPY ./dockerpkg /go/src/dockerpkg

WORKDIR /go/src/app
COPY ./dockerpkgmain .

RUN go get -d -v ./...
RUN go install -v ./...

CMD ["app"]