如何使用main.go在文件夹内的本地包中构建docker镜像?

时间:2018-04-19 06:46:49

标签: docker go docker-build

我正在尝试使用docker build -t test_1。 ,但有这个错误:

  

package docker_test / mult:无法识别的导入路径“docker_test / mult”   (导入路径不以主机名开头)

     

命令'/ bin / sh -c go get -d -v。/ ...'返回非零代码:1

我的dockerfile(路径/ gowork / src / Dockerfile):

FROM golang:1.9.1
COPY ./docker_test/mult /go/src/app

WORKDIR go/src/app
COPY ./docker_test/main.go .

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

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

main.go(路径:gowork / src / docker_test / main.go)

package main

import (
    "docker_test/mult"
    "fmt"
)

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

mult.go(路径:gowork / src / docker_test / mult / 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)

}

2 个答案:

答案 0 :(得分:3)

go get尝试在docker_test/mult路径中找到包/go。但是,您已复制到/go/src/app。这就是为什么go get无法在本地找到包并假设包来自远程存储库(例如github)并抛出错误import path does not begin with hostname的原因。因此,请复制docker_test/mult /go路径内的WORKDIR go/src/app

另一个问题是,当您使用go/src/app时,它会在/go路径中创建/go/go/src/app,因此最终路径变为WORKDIR /go/src/app。所以使用绝对路径,即dockerfile

试试这个FROM golang:1.9.1 COPY ./docker_test/mult /go/src/docker_test/mult WORKDIR /go/src/app COPY ./docker_test/main.go . RUN go get -d -v ./... RUN go install -v ./... CMD ["app"] ENTRYPOINT ["app", "-f=7", "-s=9"]

String fromdate,todate;
    private Matcher matcher;
    private static final String DATE_PATTERN =
            "(0?[1-9]|1[012]) [/.-] (0?[1-9]|[12][0-9]|3[01]) [/.-] ((19|20)\\d\\d)";

答案 1 :(得分:1)

确保你设置GOPATH,在你的示例导入中使用docker_test / mult,所以为了编译它,将它放入$ GOPATH / docker_test / mult,

我已经调整了你的Dockerfile,所以你应该能够把它搞砸了

Dockerfile

FROM golang:1.9.1

ENV GOPATH /go

FROM golang:1.9.1
COPY ./docker_test /go/src/docker_test
COPY ./docker_test/main.go /go/src/app/main.go

WORKDIR /go/src/app

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


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