我的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中放置什么来构建我的图像而不改变项目结构?
答案 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"]