我正在尝试码头建造-t test_1。,但是有这样的错误:
package _test/mult:未识别的导入路径"docker_test/mult“(导入路径不以主机名开头) 命令'/bin/sh -c get -d -v ./.‘返回一个非零代码:1
我的dockerfile (path /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)
}
发布于 2018-04-18 23:21:11
go get
试图在/go
路径中找到包docker_test/mult
。但是,您已经复制到了/go/src/app
中。这就是为什么go get
无法在本地找到包,并假设包来自远程存储库,例如github,并抛出错误import path does not begin with hostname
。因此,将docker_test/mult
复制到/go
路径中。
另一个需要注意的是,当您使用WORKDIR go/src/app
时,它会在/go
路径中创建go/src/app
,因此最终路径变成了/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"]
发布于 2018-04-18 23:25:03
确保设置了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"]
https://stackoverflow.com/questions/49914411
复制相似问题